我有一個解決方案,包括幾個項目,一個主要項目,一個全球化項目和一個測試項目。我得到一個奇怪的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