我有一个解决方案,包括几个项目,一个主要项目,一个全球化项目和一个测试项目。我得到一个奇怪的MissingManifestResourceException
当主项目中的代码从全球化项目的Messages.de.resx文件中检索消息时,一切正常。
但是,当我相同的代码复制到测试项目中,我得到一个MissingManifestResourceException告诉我找到指定的或中性文化没有资源:
System.Resources.MissingManifestResourceException IST aufgetreten。
Message =Fürdie angegebene Kultur oder die neutrale Kultur konnten keine Ressourcen gefunden werden。 Stellen SIE西歇尔,DASS EGR_IQone_Globalization.Messages.resources BEIM Kompilieren richtig在 芯片组件EGR_IQone_Globalization eingebettet wurde,奥德DASS死 erforderlichen Satellitenassemblys geladen werdenkönnenUND vollständigsigniert信德。源= mscorlib程序堆栈跟踪: 贝System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing(字符串 文件名) 贝System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo的 培养,Dictionary`2 localResourceSets,布尔tryParents,布尔 createIfNotExists,StackCrawlMark & stackMark) 贝System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo的 requestedCulture,布尔createIfNotExists,布尔tryParents, StackCrawlMark & stackMark) 贝System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo的 培养,布尔createIfNotExists,布尔tryPa在 Ç租金) 贝System.Resources.ResourceManager.GetString(字符串名称,CultureInfo的培养物) 贝System.Resources.ResourceManager.GetString(字符串名称) 贝EGR_IQone_Globalization.UserMessage.GetMessage(字符串MSGID,字符串[]参数) :\项目\ EGR_IQoneH \ EGR_IQone \ EGR_IQone_Globalization \ UserMessage.cs:Zeile 28的InnerException:
通常情况下,代码只是用.resx文件,甚至使用RESGEN把它编译成.resources文件修改工作没有。
我认为这可能与ResourceManager或指定的Assembly有关,但我看不到主项目调用和测试项目调用之间有什么区别。
这是代码:
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;
}
}
谢谢!
这将是一个问题,它定位基础上的EXE的位置的卫星组装。您不再使用“常规”EXE运行,它现在是执行代码的测试运行器。很难修复,你最好在没有测试运行者的情况下测试这个场景。 –
谢谢。我想我会跳过这个测试,然后因为它在常规代码中工作,这是不值得的时间或精力。但很高兴知道为什么它不起作用,所以如果再发生这样的事情,我至少有一个想法在哪里寻找问题。 – Ishiirou