我有几个项目的解决方案,一个主项目,一个全球化项目和一个测试项目。
当主项目中的代码从全球化项目的 Messages.de.resx 文件中检索消息时,一切正常。
但是当我将相同的代码复制到测试项目时,我得到一个 MissingManifestResourceException 告诉我没有找到指定或中性文化的资源:
System.Resources.MissingManifestResourceException ist aufgetreten。
消息=Für die angegebene Kultur oder die Neutele Kultur konnten keine Ressourcen gefunden werden。Stellen Sie sicher, dass EGR_IQone_Globalization.Messages.resources beim Kompilieren richtig in die Assembly EGR_IQone_Globalization eingebettet wurde, oder dass die erforderlichen Satellitenassembly geladen werden können und vollständig signiert sind。Source=mscorlib StackTrace:bei System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(String fileName) bei System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfoculture, Dictionary`2 localResourceSets, Boolean tryParents, Boolean createIfNotExists, StackCrawlMark& stackMark) bei System.Resources.ResourceManager。 InternalGetResourceSet(CultureInfo requestedCulture, Boolean createIfNotExists,
通常,代码仅使用 .resx 文件即可工作,甚至使用 resgen 将其编译为 .resources 文件也不会改变任何内容。
我认为这可能与 ResourceManager 或指定的程序集有关,但我看不出来自主项目的调用和来自测试项目的调用之间有任何区别。
这是代码:
public static class UserMessage
{
private static ResourceManager _resourceManager;
static UserMessage()
{
string baseName = Assembly.GetAssembly(typeof(UserMessage)).GetName().Name + ".Messages.de";
Console.WriteLine(baseName);
_resourceManager = new ResourceManager(baseName, Properties.GlobalizationAssembly);
}
public static string GetMessage(string msgID, params string[] arguments)
{
string msg = "";
string error = "[Message Error] cannot read Message " + msgID;
try
{
//DefaultLanguage = 'de'
//using the GetString overload with or without CultureInfo paramter makes no difference
msg = _resourceManager.GetString(msgID, new CultureInfo(Properties.DefaultLanguage));
for (int i = 0; i < arguments.Length; i++)
{
msg = msg.Replace("{" + i.ToString() + "}", arguments[i]);
}
}
catch (Exception ex)
{
Console.WriteLine(error + "\r\n" + ex.ToString());
return error;
}
return msg;
}
}
谢谢!