我无法在Visual Studio C ++ 2012中编译/构build任何东西,因为我得到一个错误,指出我有一个不适当的ToolsVersion或ToolSet丢失。 这是控制台中的错误: 项目文件包含ToolsVersion =“12.0”。 此工具集可能是未知的或丢失的 ,在这种情况下,您可以通过安装适当版本的MSBuild来解决此问题,或者出于策略原因可能已经强制构build特定的ToolsVersion。 处理该项目就好像它有ToolsVersion =“4.0”。 1> C:\ Program Files文件(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V110 \ Microsoft.Cpp.Platform.targets(44,5):错误MSB8020:构build工具为v120(平台工具集='v120 ')找不到。 要使用v120构build工具构build,请单击“项目”菜单或右键单击解决scheme,然后select“更新VC ++项目…”。 安装v120以使用v120构build工具构build 。 我已经安装了Microsoft SDK。 这也许是相关的 – 我最近从2013 VSRC降级到2012 MSVC,但是我做了一个干净的卸载。
我看着C:\Program Files\Microsoft.NET ,我看不到任何SN.exe文件。 我有.NET 3.5运行时安装; 这不够吗?
使用特定版本的msbuild构build项目或解决scheme时,可以使用/toolsversion或/tv开关select较早的.net工具链: "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:12.0 amazing.sln 这只适用于所有版本的msbuild ,并正确selectcsc.exe等版本基于上述: > "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:4.0 amazing.sln … CoreCompile: C:\Windows\Microsoft.NET\Framework\v4.0.30319\Csc.exe … … > "C:\Program Files (x86)\MSBuild\14.0\bin\msbuild" /tv:12.0 amazing.sln … CoreCompile: C:\Program Files (x86)\MSBuild\12.0\bin\Csc.exe … … 如果我不指定/tv ,那么取决于我使用的是哪个版本的msbuild以及一些环境variables,我可能会得到以下任何一个: 在项目文件的顶层元素中指定的ToolsVersion ToolsVersion对应于我正在使用的msbuild.exe版本 来自msbuild.exe.config的值 来自registry的值 (请参阅MSDN上“ 覆盖ToolsVersion设置”页面的不同版本 )。 因此,为了在构build服务器和本地计算机上具有一致的结果,我在运行msbuild.exe时使用/tv (实际上,这是在psake脚本中执行的,这也确保它使用相应的版本的msbuild.exe )。 但是,使用Visual Studio构build时,我无法使用/tv开关。 相反,Visual Studio 2013及以上版本将使用该版本的Visual Studio附带的.net工具链, 除非 : 环境variablesMSBUILDLEGACYDEFAULTTOOLSVERSION设置和 … …所有的项目文件都将ToolsVersion属性设置为我想要使用的版本。 […]
我有以下MSBuild脚本: <?xml version="1.0" encoding="utf-8"?> <Project DefaultTargets="Main" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> <PropertyGroup> <build_configurations>test1;test2;test3</build_configurations> </PropertyGroup> <ItemGroup> <BuildConfigurations Include="$(build_configurations)" /> </ItemGroup> <Target Name="Main"> <Message Text="Running with args: %(BuildConfigurations.Identity)" /> </Target> </Project> 如果我没有任何参数调用脚本,我得到预期的回应: Running with args: test1 Running with args: test2 Running with args: test3 但是,当我尝试通过命令行设置属性如下所示: msbuild [myscript] /p:build_configurations=test5%3btest6%3btest7 我得到以下内容: Running with args: test5;test6;test7 所以,这不是如预期的那样。 我需要让MSBuild创build三个项目而不是一个项目的项目组。 我该怎么做? 谢谢。 PS下面的文章基本上解决我的问题,除了我想传递分号分隔的值的情况下: http : […]
我正在尝试让我的Web应用程序在执行发布构build时自动发布。 我正在使用_CopyWebApplication目标执行此操作。 我将以下内容添加到我的.csproj文件中: <!– Automatically Publish in Release build. –> <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" /> <Target Name="AfterBuild"> <RemoveDir Directories="$(ProjectDir)..\Output\MyWeb" ContinueOnError="true" /> <MSBuild Projects="MyWeb.csproj" Properties="Configuration=Release;WebProjectOutputDir=$(ProjectDir)..\Output\MyWeb;OutDir=$(ProjectDir)bin\" Targets="ResolveReferences;_CopyWebApplication" /> </Target> 这工作但有一个问题。 此输出与在Visual Studio中使用“发布”菜单项时生成的输出之间的区别在于,在使用MSBuild方法时,Web.Release.config转换不会应用于Web.config文件。 相反,Web.config,Web.Release.config和Web.Debug.config都被复制。 任何想法都表示赞赏。
我正在打包SDK分发的示例代码。 在发行版中,从代码到SDK程序集的相对path与构build机器不同。 例如: 分配 csharp/bin/assembly.dll example/ex1/ex1.csproj build立机器 foo/sdk/csharp/bin/assembly.dll bar/baz/quux/ex1/ex1.csproj 假设我不能移动任何东西。 有没有一种方法,我可以指示ex1.csproj看在两个 ../../csharp/bin/ 和 ../../../../foo/sdk/csharp/bin/ for assembly.dll ? 在C ++中,我会把依赖path放在一个独立的属性表中,并用SDK分发不同的版本。 但C#没有属性表,我不想维护整个项目的两个版本。 我见过这个问题 ,说我不能使用多个<HintPath>标签,所以我正在寻找另一种方法来近似相同的行为。
我从视觉工作室2010错误: 错误1项目“CrossDomainService.svc.cs”在“Sources”参数中指定了多次。 “Sources”参数不支持重复的项目。 WcfServiceDomain 并从msbuild C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.CSharp.targets(160,9):错误MSB3105:项目“CrossDomainService.svc.cs”在“Sources”参数中指定了多个。 “Sources”参数不支持重复的项目。 [C:\ inetpub \ Wwwroot \ axaptaWcfConnection \ WcfServiceDomain \ WcfSer viceDomain.csproj] 我的文件是csproj: <?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <PropertyGroup> <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> <ProductVersion> </ProductVersion> <SchemaVersion>2.0</SchemaVersion> <ProjectGuid>{8D40933A-E036-4CD0-9003-314A692724D5}</ProjectGuid> <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids> […]
以下文件path是什么意思? $(Services_Jobs_Drop_Path)\**\*.config variables只是有一些path,没有什么有趣的。 我更关心,这是什么意思。 有任何想法吗? PS在msbuild脚本中使用以下path(如果有帮助)。
我试图通过向控制台发送消息来“printf()debugging”我的Visual Studio项目文件,如下所示: <Target Name="BeforeBuild"> <Message Text="+++++++++++++++++++++++ Justin Dearing ++++++++++++++++++++++++++++++++++++" /> </Target> 这从命令行工作: BeforeBuild: +++++++++++++++++++++++ Justin Dearing ++++++++++++++++++++++++++++++++++++ 但是,这些消息不显示在Visual Studio 2010生成输出中。 是否有一个替代的MSBuild任务,我可以使用,或在Visual Studio中的设置,我可以使这些消息出现?
在构build解决scheme或错误引用的特定项目时,我们在构build服务器上收到上述错误消息。 我们可以使用Visual Studio(也可以在构build服务器上)构build解决scheme,但是在运行msbuild时会出现上述错误。 有任何想法吗?