【问题标题】:Can I use msbuild 4.0 to target dotnet 3.5?我可以使用 msbuild 4.0 来定位 dotnet 3.5 吗?
【发布时间】:2012-02-27 11:46:01
【问题描述】:

在我的解决方案中,我有对(例如)System.ServiceModel.dll 的项目引用,其中“使用特定版本”设置为 false。 使用 msbuild 3.5 一切正常。

我想使用 msbuild 4.0 来使用 property functions。我尝试传入属性“TargetFrameworkVersion=3.5;ToolsVersion=3.5”。但是,我收到以下错误:

无法加载文件或程序集“C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.configuration.dll”或其依赖项之一。

如果我使用 msbuild 3.5,则不会发生这种情况。

我可以在项目文件中不指定版本的情况下完成这项工作吗? (将来我们可能希望将应用程序升级到 dotnet 4)

编辑:我尝试在“外部”调用中使用 msbuild 3.5,并为需要新功能的目标调用 msbuild(使用<msbuild>task)4.0。这也没有运气 - 内部调用会给出以下错误消息:

错误 MSB4062:无法加载文件或程序集 'Microsoft.Build.Tasks.v4.0, Version=4.0.0.0 或其依赖项之一。该系统找不到指定的文件。确认声明正确,并且程序集及其所有依赖项均可用。

【问题讨论】:

  • 标题问题的答案是“是”。我怀疑您的第二个问题的答案(针对没有项目更改的程序集引用)可能是“否”。您是否将特定项目定位到 .NET 3.5?我的意思是,不是它的依赖项,而是项目本身的目标框架。您将来可以更轻松地修改这些内容。
  • 解决方法是VS2008。所有项目都针对 3.5 或 2.0。
  • 您确定您实际上调用的是MSBuild.exe 4.0 版可执行文件吗?它安装在 `%windir%\Microsoft.NET\Framework\v4.0.30319`(对于 32 位)。或者确保您使用 VS2010 命令提示符(而不是 VS2008 命令提示符)。

标签: msbuild .net-framework-version


【解决方案1】:

传递给msbuild的参数是:

/p:TargetFrameworkVersion="v3.5"

这在 MSBuild 3.5 及更高版本(3.5、4.0、2012、2013 等)中可用。它会更改该构建的 msbuild 脚本中的属性。

额外注意的是,您甚至可以为每个 MSBuild 版本指定机器上安装的所有目标版本。通常您无法在 Visual Studio 中执行此操作(例如,在 2010 年使用 4.5.1),但是 MSBuild 4.0 (vs2010) 会将其作为属性值并使用它。

【讨论】:

    【解决方案2】:

    试试:

    /p:TargetFramework=v3.5
    

    目标框架版本可以是 v2.0、v3.0 或 v3.5。如果您是不在给定目标框架版本中的引用程序集,那么您将在构建时收到错误/警告。

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-25
      • 2011-02-18
      • 2011-05-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多