VS2010编译解决方案没有错误,msbuild失败:"fatal error CS0002: Unable to load message string from resources"



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

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

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

Build FAILED.
"C:TeamCitybuildAgentwork85eff164854b9e67LibrariesDomainface.Proxy.CommonDomainface.Proxy.Common.csproj" (default target) (9) ->
(CoreCompile target) -> 
  CSC : fatal error CS0002: Unable to load message string from resources. [C:TeamCitybuildAgentwork85eff164854b9e67LibrariesDomainface.Proxy.CommonDomainface.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框架有关,所以我会看看这是否有什么不同。

更新

安装更新没有帮助。我只记得不久前为了方便异步编译,我从异步预览中复制了csc.exe(由于visual studio不在,实际的异步预览未能在服务器上安装,但安装visual studio团队查看器似乎已经解决了这个问题,所以我只运行了适当的异步ctp3安装程序,看看这是否有什么不同。

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

嗯,有些事情很奇怪。你更新.NET框架版本的想法是可靠的,这也将更新csc.exe。应该足够好,可以修复任何损坏。

这通常是实体框架设计器处理连接字符串时的问题。在app.config文件中,确保程序集和资源名称是它们应该是的名称。

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

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

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

因此,修复方法是修复.Net框架安装,可以通过重新安装、对其运行修复或安装新版本来完成(在我的情况下,这是异步ctp,虽然不是完全的.Net框架版本升级,但足以纠正编译器使用的任何不匹配的资源引用)。

相关内容

最新更新