【问题标题】:Differences between building on a machine with VS2010 installed and on a machine with the 7.1 SDK installed在安装了 VS2010 的机器上构建和在安装了 7.1 SDK 的机器上构建的区别
【发布时间】:2010-11-24 22:04:47
【问题描述】:

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

提前致谢。

克里斯

【问题讨论】:

    标签: .net msbuild sdk msbuild-4.0


    【解决方案1】:

    当您将解决方案升级到 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

    【讨论】:

    • 升级项目时,我们将目标框架版本保持为3.5。构建服务器没有安装 7.0A SDK(他们有 7.1 SDK)。 [7.0A 安装了 Visual Studio,我们还没有在构建服务器上安装它]。
    • 对不起,我昨晚累了。您在 csproj 中使用哪个“ToolsVersion”?
    • 那个链接看起来很有趣——我检查了我们的构建服务器,我们有相同的错误命名的键。我 99% 确定您已经确定了问题(所以我将其标记为答案):我没有尝试过解决方法,因为我们在构建 3.5 目标代码时遇到了所有问题将我们的解决方案升级到 .Net 4.0。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多