【发布时间】: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.exe4.0 版可执行文件吗?它安装在 `%windir%\Microsoft.NET\Framework\v4.0.30319`(对于 32 位)。或者确保您使用 VS2010 命令提示符(而不是 VS2008 命令提示符)。
标签: msbuild .net-framework-version