2

我们正在尝试升级我们的代码库以使用 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 对象?

提前致谢。

克里斯

4

1 回答 1

3

当您将解决方案升级到 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 -错误的嵌入式资源

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

于 2010-11-23T23:06:05.503 回答