我可以使用msbuild 4.0来定位dotnet 3.5吗?

时间:2012-02-27 11:46:01

标签: msbuild .net-framework-version

在我的解决方案中,我有项目引用(例如)System.ServiceModel.dll,其中“use specific version”设置为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>任务)4.0。也没有运气 - 内部调用给出以下错误消息:

  

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

2 个答案:

答案 0 :(得分:4)

传递给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)会将其作为属性值并使用它。

答案 1 :(得分:2)

尝试:

/p:TargetFramework=v3.5

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

参考文献: