C# I';我收到了一个奇怪的MissingManifestResourceException

C# I';我收到了一个奇怪的MissingManifestResourceException,c#,globalization,resourcemanager,C#,Globalization,Resourcemanager,我有几个项目的解决方案,一个主项目,一个全球化项目和一个测试项目 当主项目中的代码从全球化项目的Messages.de.resx文件中检索消息时,一切正常 但是当我将相同的代码复制到测试项目时,我得到一个MissingManifestResourceException,告诉我没有为指定的或中立的区域性找到任何资源: System.Resources.MissingManifestResourceException列表aufgetreten。 Message=Für die angegebene

我有几个项目的解决方案,一个主项目,一个全球化项目和一个测试项目

当主项目中的代码从全球化项目的Messages.de.resx文件中检索消息时,一切正常

但是当我将相同的代码复制到测试项目时,我得到一个MissingManifestResourceException,告诉我没有为指定的或中立的区域性找到任何资源:

System.Resources.MissingManifestResourceException列表aufgetreten。
Message=Für die angegebene Kultur order die neutrale Kultur konten 基恩·雷索森·格芬登·沃登。斯泰伦·西彻,达斯 EGR_IQone_Globalization.Messages.resources beim Kompilieren richtig in 模具装配EGR_IQone_全球化eingebettet wurde,oder dass模具 地衣卫星总成geladen werden können和 沃尔斯特·辛德先生。Source=mscorlib StackTrace: bei System.Resources.ManifestBasedResourceGroveler.HandlerResourceStreamMissing(字符串 文件名) bei System.Resources.ManifestBasedResourceGroveler.GrovelForResourceSet(CultureInfo 区域性,Dictionary`2 LocalResourceSet,布尔tryParents,布尔 createIfNotExists、StackCrawlMark和stackMark) bei System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo requestedCulture、布尔createIfNotExists、布尔tryParents、, 堆叠标记和堆叠标记) bei System.Resources.ResourceManager.InternalGetResourceSet(CultureInfo 区域性、布尔createIfNotExists、布尔tryParents) bei System.Resources.ResourceManager.GetString(字符串名称,CultureInfo区域性) bei System.Resources.ResourceManager.GetString(字符串名称) 中的bei EGR_IQone_Globalization.UserMessage.GetMessage(字符串msgID,字符串[]参数) C:\projects\EGR\u IQoneH\EGR\u IQone\EGR\u IQone\u Globalization\UserMessage.cs:Zeile 28内部异常:

通常,代码只使用.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;
        }
    }
公共静态类UserMessage
{
私有静态ResourceManager\u ResourceManager;
静态用户消息()
{
字符串baseName=Assembly.GetAssembly(typeof(UserMessage)).GetName().Name+“.Messages.de”;
Console.WriteLine(baseName);
_resourceManager=新的resourceManager(baseName、Properties.GlobalizationAssembly);
}
公共静态字符串GetMessage(字符串msgID,参数字符串[]参数)
{
字符串msg=“”;
string error=“[Message error]无法读取消息”+msgID;
尝试
{
//DefaultLanguage='de'
//使用带或不带CultureInfo参数的GetString重载没有任何区别
msg=_resourceManager.GetString(msgID,newCultureInfo(Properties.DefaultLanguage));
for(int i=0;i


谢谢

我也遇到了同样的错误-即使应用程序已经运行了一段时间,它还是突然发生了

它有助于在获取资源之前设置
Thread.CurrentThread.CurrentUICulture

请尝试以下操作或类似操作:

Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("de-DE");
msg = _resourceManager.GetString(msgID);

这将是一个问题,它根据EXE的位置定位附属程序集。您不再使用“常规”EXE运行,它现在是执行代码的测试运行程序。很难修复,您最好在没有测试运行程序的情况下测试此场景。谢谢。我想我将跳过此测试,因为它在常规代码中工作,不值得花费时间或精力。但知道它为什么不起作用是很好的,这样,如果类似的事情再次发生,我至少知道应该在哪里寻找问题。