Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# VS2015:如何使用MSBuild 12.0构建?_C#_.net_Visual Studio_Msbuild - Fatal编程技术网

C# VS2015:如何使用MSBuild 12.0构建?

C# VS2015:如何使用MSBuild 12.0构建?,c#,.net,visual-studio,msbuild,C#,.net,Visual Studio,Msbuild,我已经安装了VS2015(MSBuild 14.0)和VS2013(MSBuild 12.0)。原因是我有一个项目只能使用MSBuild12.0构建。我已经吃尽了苦头。我更改了项目文件以指定MSBuild 12.0,但出现以下错误: 项目文件包含ToolsVersion=“12.0”。此工具集可能未知 或丢失,在这种情况下,您可以通过 正在安装适当版本的MSBuild,或者生成可能具有 由于策略原因,已被迫使用特定的ToolsVersion。治疗 该项目就像它有ToolsVersion=“14.

我已经安装了VS2015(MSBuild 14.0)和VS2013(MSBuild 12.0)。原因是我有一个项目只能使用MSBuild12.0构建。我已经吃尽了苦头。我更改了项目文件以指定MSBuild 12.0,但出现以下错误:

项目文件包含ToolsVersion=“12.0”。此工具集可能未知 或丢失,在这种情况下,您可以通过 正在安装适当版本的MSBuild,或者生成可能具有 由于策略原因,已被迫使用特定的ToolsVersion。治疗 该项目就像它有ToolsVersion=“14.0”一样。欲了解更多信息, 请看

我知道工具集没有丢失,它安装在这里:
C:\ProgramFiles(x86)\MSBuild\12.0

我希望它能像在我的.csproj文件中更改
ToolsVersion=12.0
一样简单

此外,我与一个团队合作,因此理想情况下,我正在寻找侵入性最小的解决方案。我不喜欢更改注册表值等


非常感谢您的帮助。

我们无法直接在visual studio 2015中使用工具版本12。MSDN说:

从Visual Studio 2013开始,MSBuild工具集版本是 与Visual Studio版本号相同。MSBuild默认为 Visual Studio内和命令行上的工具集,无论 项目文件中指定的工具集版本。此行为可以是 通过使用/ToolsVersion标志重写。有关详细信息,请参阅 "

我们可以使用命令提示符覆盖项目和解决方案的ToolsVersion设置:

msbuild.exe someproj.proj /tv:12.0
此外,Guy Bolton King提供了一个Visual Studio扩展来实现它。下面是GitHub上的项目的示例

Set-toolsversion extension,用于在生成期间临时设置环境变量MSBUILDDEFAULTTOOLSVERSION;要使用的值是从与.sln文件位于同一目录下的.toolsversion文件中读取的。psake脚本读取相同的.toolsversion文件,并将值传递给/tv开关

请生成扩展项目并将SetToolsVersion.vsix安装到visual studio

请注意
感谢@mbadawi23提醒您清洁了解决方案,在安装扩展后关闭了VS并再次打开,还需要添加.toolsversion。

您不能。默认情况下,VS加载硬编码的MSBuild版本,并且没有要更改的显式设置。但这不是我从MSDN文档中得到的印象。您能告诉我这是在哪里指定的吗?如果能听到为什么只能使用msbuild 12.0进行生成,我会非常感兴趣。@stijn长话短说,项目中的一个依赖项与msbuild 15.0不兼容。甚至在Roslyn GitHub中也有报道,您提供的链接列出了三个选项:1。通过使用/ToolsVersion开关。2.通过在MSBuild任务上设置ToolsVersion参数。3.通过在项目上设置$(ProjectToolsVersion)属性。我最初的尝试是在IDE中构建,因此剩下的选项2和3对我来说不起作用。看起来我需要一个像Jenkins这样的构建系统。谢谢你的回答,它提供了很好的知识。我正要接受你的请求,但使用该扩展没有帮助。Guy Bolton King的扩展成功地设置了
MSBUILDDEFAULTTOOLSVERSION
环境变量,但这对构建没有影响。我在输出窗口中看到:
将MSBUILDDEFAULTTOOLSVERSION设置为12.0
,在下面的一行中看到:
4>使用工具版本“14.0”进行构建。
在构建结束时看到:
恢复MSBUILDDEFAULTTOOLSVERSION
实际上,我能够让它工作。我本来打算今晚更新我的评论,但我还是花了一段时间才让它生效。请添加到扩展存储库的链接,并更新关于如何构建扩展项目和使用扩展的答案。我要做的是在安装扩展后第一次运行vs2015之后,清理解决方案,关闭vs,然后再次打开它。当然我必须添加.toolsversion文件。谢谢你提醒我。我已经更新了我的评论和答案。如果您有任何其他补充,请添加评论!谢谢