.NET 4.0到3.0找不到任何适合指定区域性或非特定区域性的资源
本文关键字:区域性 资源 非特 找不到 任何适 NET | 更新日期: 2023-09-27 18:24:14
我在网上找到了一个免费的.NET 4.0程序,但必须复制代码才能编译VS2008。我认为不同版本的.NET处理文化的方式一定不同。我得到这个错误:
System.Resources.MissingManifestResourceException:找不到任何适合特定文化或中立的资源文化确保"A.B.C.Resources.ExceptionMessage.Resources"编译时正确嵌入或链接到程序集"A.B.C.csproj"时间,或者所需的所有卫星组件都是可装载的,并且完全签署。
它是一个C#.dll(类库),我从控制台程序中调用它。它确实分配了一个强密钥文件。
任何这样的声明都会爆炸:
return ResourceManager.GetString("XYZ");
看起来所有的资源都是英文的,这是我唯一需要的语言。我只是想知道如何避免这个例外。
当我复制文件并重新构建一个新的VS2008项目时,Visual Studio解决方案资源管理器中没有资源文件的层次关系。例如,ExceptionMessage.resx和ExceptionMessage.Designer.cs处于同一级别;而Designer.cs文件通常缩进在.resx文件下。我不确定发生了什么事。
所以我所做的是创建一个新的.resx文件,并使用NotePad和filemerge程序仔细复制.resx和.cs文件的片段。然后它工作得很好。
我仍然不完全确定问题是什么,但我知道这已经解决了。今天在这个问题上损失了大约5个小时。
比较来自版本4和版本3解决方案的程序集中的[assembly: AssemblyCulture("")]
属性可能是值得的。
默认情况是——我认为——没有。
MSDN文档:
将此属性放在程序集上并使用区域性名称的空字符串(")将生成此程序集看起来像一个卫星组件,〔…〕
也许你需要明确地定义它,或者它已经被定义了,但不应该被定义?
我遇到过这种困难,发现原因与项目属性中的Assembly名称和Default命名空间有关。将两者设置为相同或类似效果会有所帮助。