我们正在尝试升级我们的代码库以使用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的资源使用2.0.0.0版本而另一个(来自构建服务器)使用4.0 .0.0。在两种情况下,项目引用都是针对v2.0.0.0 dll(正如人们所期望的那样)。
有没有人知道为什么MSBuild将资源编译为4.0对象?
提前致谢。
克里斯
答案 0 :(得分: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-wrong-embedded-resources
我认为您需要手动添加注册表项HKLM\Software\Microsoft\MsBuild\ToolsVersions\SDK35ToolsPath
答案 1 :(得分:0)
我不确定这是否有帮助但是看到有关RequiresFramework35SP1Assembly任务的链接