VS2010编译没有错误的解决方案,msbuild失败:“致命错误CS0002:无法从资源加载消息字符串”

时间:2012-03-24 15:40:51

标签: c# visual-studio-2010 msbuild compiler-errors

我在尝试追踪此错误消息的原因时遇到了很多麻烦。我有一个大型的Visual Studio 2010解决方案,在我的本地计算机上编译时没有错误,但在构建服务器上,msbuild在其中一个项目上失败并出现错误:

致命错误CS0002:无法从资源加载消息字符串

这是最后的红色错误部分:

Build FAILED.

"C:\TeamCity\buildAgent\work\85eff164854b9e67\Libraries\Domainface.Proxy.Common\Domainface.Proxy.Common.csproj" (default target) (9) ->
(CoreCompile target) -> 
  CSC : fatal error CS0002: Unable to load message string from resources. [C:\TeamCity\buildAgent\work\85eff164854b9e67\Libraries\Domainface.Proxy.Common\Domainface.Proxy.Common.csproj]

    0 Warning(s)
    1 Error(s)

构建服务器的整个msbuild输出位于:http://pastie.org/3660842

错误通常会引用什么,这会导致它在本地构建,而不是在构建服务器上构建?

更新

我刚刚在两台机器上运行msbuild /version,结果证明.net框架版本略有不同。本地计算机为4.0.30319.488,构建服务器为4.0.30319.1。我即将在服务器上运行Windows更新以允许它安装一些更新,因为有几个似乎是.net框架相关的,所以我会看看是否会产生影响。

更新

安装更新没有帮助。刚刚记得我刚刚从async预览中复制了csc.exe以便于异步编译(由于visual studio不在那里,实际的异步预览无法在服务器上安装,但安装visual studio team viewer似乎已修复,所以我只是运行正确的异步ctp3安装程序,看看是否有所作为。

3 个答案:

答案 0 :(得分:2)

CS0002未记录在案。解释错误消息,我会说编译器试图向您显示编译错误消息,但在尝试检索消息文本时失败。有点奇怪的是,它的资源实际上并没有字符串表,也不确定它来自何处。

嗯,有些东西非常活跃。您更新.NET框架版本的想法是可靠的,这也将更新csc.exe。应该足够好来修复任何损害。

答案 1 :(得分:0)

这通常是the Entity Framework designer's handling of your connection strings的问题。在app.config文件中,确保程序集和资源名称是它们应该是的。

以下是连接字符串特定部分的格式:

Metadata= res://<assemblyFullName>/<resourceName>

答案 2 :(得分:0)

好的,基于我自己尝试解决问题的经验,以及Hans的答案以及我在谷歌搜索时挖出的一些其他讨论,我猜测发生此错误的唯一方法是遇到问题使用当前状态的.Net框架安装。本质上,编译器与其使用的其他资源之间的不匹配意味着当编译器遇到错误时,它会尝试从引用的资源中提取错误消息,但由于资源与编译器构建不匹配,因此错误消息不可用而编译器报告它无法加载消息(因此无法有效地显示正确的错误消息)。

因此修复是修复.Net框架安装,可以通过重新安装,运行修复或安装更新版本(在我的情况下是异步ctp,虽然不是完整版本)来完成。 net framework version upgrade,足以纠正编译器使用的任何不匹配的资源引用。