2012-02-27 30 views
2

在我的解决方案中,我有项目引用(例如)“使用特定版本”设置为false的System.ServiceModel.dll。 一切都与MSBuild 3.5良好。我可以使用msbuild 4.0来定位dotnet 3.5吗?

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

Could not load file or assembly 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.configuration\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.configuration.dll' or one of its dependencies.

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

我可以在不指定项目文件中的版本的情况下进行此项工作吗? (今后我们可能想升级应用程序到dotnet 4)

编辑:我尝试在“外部”调用中使用msbuild 3.5,并为那些需要新功能的目标调用msbuild(使用<msbuild>任务)4.0。这种要么没有运气 - 内调用提供了以下错误信息:

error MSB4062: Could not load file or assembly 'Microsoft.Build.Tasks.v4.0, Version=4.0.0.0 or one of its dependencies. The system cannot find the file specified. Confirm that the declaration is correct, and that the assembly and all its dependencies are available.

+1

标题问题的答案是“是”。我怀疑第二个问题的答案(针对没有项目更改的程序集引用)可能是“否”。 您是否将特定项目定位到.NET 3.5?我的意思是,不是它的依赖关系,而是项目本身的目标框架。您可以在将来更轻松地修改这些内容。 – CJBrew 2012-02-27 11:50:56

+0

解决方案是VS2008。所有项目都以3.5或2.0为目标。 – Rob 2012-02-27 11:55:18

+0

你确定你确实在调用MSBuild.exe 4.0版本的可执行文件吗?它安装在'%windir%\ Microsoft.NET \ Framework \ v4.0.30319 \'(对于32位)。或者确保您使用VS2010命令提示符(不是VS2008命令提示符)。 – 2012-02-28 09:23:44

回答

2

尝试:

/p:TargetFramework=v3.5 

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

参考文献:

+1

你想'TargetFrameworkVersion'不'TargetFramework'! – 2013-08-26 15:46:07

3

参数传递给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)将把它作为一个属性值并使用它。

相关问题