【发布时间】:2011-02-15 18:07:29
【问题描述】:
如何强制 Visual Studio 2010 使用 MSBuild 3.5 而不是新的 4.0?
【问题讨论】:
标签: visual-studio-2010 msbuild
如何强制 Visual Studio 2010 使用 MSBuild 3.5 而不是新的 4.0?
【问题讨论】:
标签: visual-studio-2010 msbuild
我认为你不能改变 Visual Studio 中使用的 MSBuild 的版本,而没有肮脏的 hack。
MSBuild 使用的 MSBuild 任务、目标和工具的版本由项目文件中的 ToolsVersion 属性确定。
问题:如果您在项目文件上手动将 ToolsVersion 更改为 3.5,Visual Studio 2010 会自动将项目文件的 ToolsVersion 升级到 4.0
解决方案是将您的项目 ToolsVersion 设置为 3.6(或者如果您真的想要覆盖 MSBuild 4.0,则设置为 4.0),然后在注册表中创建以下键:
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\3.6
MSBuildToolsPath
.NET Framework 3.5 Install Path (C:\Windows\Microsoft.NET\Framework\v3.5)在 ToolsVersion 未知的机器上,将使用默认的 ToolsVersion。
更多关于custom toolset definition的信息。
【讨论】:
你为什么想要那个?有什么 3.5 有能力但 4.0 没有的吗?
如果您真正担心的是,当将代码签出到未安装 .NET 4 的机器时,您可以使用 MSBuild 3.5 构建项目 (csproj)。您需要为 MSBuild 3.5 创建一个解决方案文件,因为它不接受 VS2010 的 sln 文件。
当 MSBuild 遇到 ToolsVersion="4.0" 时,它会将其视为 ToolsVersion="3.5",然后一切都会继续工作。
我的开源项目#SNMP 利用了这些技巧,因此可以在 .NET 4、.NET 3.5 和 Mono 上构建源代码。
【讨论】:
您可以从项目属性对话框中定位不同版本的运行时:
alt text http://img14.imageshack.us/img14/3051/vstargetframework.png
不确定修改构建规则以将 MsBuild 3.5 用于 C#/VB.NET 目标是否是个好主意。
(以下更改是不必要的。使用 .NET 4 目标文件完全没有问题。) 编辑尝试用文本编辑器打开c#项目,修改这一行:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
到这里:
<Import Project="C:\Windows\Microsoft.NET\Framework\v3.5\Microsoft.CSharp.targets" />
【讨论】: