我们正在尝试升级代码库以使用 Visual Studio 2010,但在构建服务器上对所有内容进行排序时遇到问题。我们不想在构建服务器上安装 Visual Studio 2010,因此只安装了 .Net 4 框架和 SDK (v7.1)。

我们仍然希望以 .Net 3.5 平台为目标(我们将在将来的某个时候升级到 .Net 4,但现在还不想)。

我们已经设法编译代码,但现在遇到如下运行时错误。

Could not load file or assembly 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

问题是运行时正在尝试反序列化嵌入的资源,如果我查看反射器中的资源,我会发现它们都是 .Net 4.0 对象。例如我们的一个windows应用程序的图标是类型 System.Drawing.Icon, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a.

那么看起来 MSBuild 正在错误地编译资源(使用与目标不同的运行时)?我通过查看在我的开发计算机上构建的 dll 和在构建服务器上构建的 dll 的差异来确认这一点 - 很明显看到一个 dll 的资源使用 2.0.0.0 版本,而另一个(来自构建服务器)使用 4.0 .0.0。在这两种情况下,项目引用都是 v2.0.0.0 dll(正如人们所期望的那样)。

有谁知道为什么 MSBuild 将资源编译为 4.0 对象?

提前致谢。

克里斯

有帮助吗?

解决方案

当您将解决方案升级到VS2010时,您是否更改了目标框架?您可以通过在文本编辑器中查看 csproj 文件来查找它。您的构建服务器中有 7.0a 框架吗?

编辑 :

我不久前遇到了同样的问题,这与未设置注册表项有关。看看这里:http://connect.microsoft.com/VisualStudio/feedback/details/594338/tfs-2010-build-agent-and-windows-7-1-sdk-targeting-net-3-5-generates-wrong-embedded-资源

我认为您需要手动添加注册表项 HKLM\Software\Microsoft\MsBuild\ToolsVersions\SDK35ToolsPath

其他提示

我不知道如果这有助于但是看到有关RequiresFramework35SP1Assembly任务此链接

http://msdn.microsoft.com/en-us/library/ ff598689.aspx

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top