【问题标题】:Use MSBuild 3.5 with Visual Studio 2010将 MSBuild 3.5 与 Visual Studio 2010 一起使用
【发布时间】:2011-02-15 18:07:29
【问题描述】:

如何强制 Visual Studio 2010 使用 MSBuild 3.5 而不是新的 4.0?

【问题讨论】:

标签: visual-studio-2010 msbuild


【解决方案1】:

我认为你不能改变 Visual Studio 中使用的 MSBuild 的版本,而没有肮脏的 hack。

工具版本

MSBuild 使用的 MSBuild 任务、目标和工具的版本由项目文件中的 ToolsVersion 属性确定。

  • Visual Studio 2008 使用 ToolsVersion="3.5"
  • Visual Studio 2010 使用 ToolsVersion="4.0"

问题:如果您在项目文件上手动将 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的信息。

【讨论】:

  • 在使用 MSBuild 3.5 构建 VS2010 csproj 的机器上,MSBuild 3.5 只是将 ToolsVersion="4.0" 视为 ToolsVersion="3.5"。所以 VS2010 项目文件在某些​​情况下仍然可以通过 MSBuild 3.5 构建(尤其是当您要求 VS2010 针对 .NET 3.5 而不是 4 构建时)。
  • hack 听起来很有趣...但是必须在任何可以构建项目的机器上进行,对吗?对于团队项目来说可能不太好 - 我猜还需要向 TFS 构建服务器添加 hack。在从框架到框架的迁移过程中可能很有用..可能会尝试一下
【解决方案2】:

你为什么想要那个?有什么 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 上构建源代码。

【讨论】:

  • 将 VS 2010 用于无法使用 MSBuild 4.0 的项目。
【解决方案3】:

您可以从项目属性对话框中定位不同版本的运行时:

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" />

【讨论】:

  • 这没有帮助,因为 MSBuild 4.0 使用的是 Framework 4.0。我们需要针对 MSBuild 3.5
  • 查看编辑,这可能会有所帮助。不确定系统引用会发生什么,如果它们在 Vs2008->VS2010 转换期间被转换,可能需要将它们指向 v3.5 的程序集。
  • 这也不会改变实际使用的可执行文件。
  • @HeavyWave,你抱怨什么“这没有帮助,因为 MSBuild 4.0 使用 Framework 4.0。我们需要以 MSBuild 3 为目标。”是一种误解。虽然 MSBuild 4 依赖于 .NET 4,但如果您要求它针对早期的 .NET 版本构建项目,您将看到输出仅取决于旧版本,而不是 .NET 4。您甚至不需要编辑 标签。
  • Visual Studio 2010 也引用了 .NET 4 程序集,但它与构建结果无关,对吧?那为什么不能使用 MSBuild 4?
猜你喜欢
  • 2023-03-20
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 2011-12-16
  • 2021-03-30
  • 2023-03-29
  • 2011-02-13
相关资源
最近更新 更多