Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#应用程序:构建安装程序后缺少本地化DLL_C#_Forms_Localization_Installation_Ilmerge - Fatal编程技术网

C#应用程序:构建安装程序后缺少本地化DLL

C#应用程序:构建安装程序后缺少本地化DLL,c#,forms,localization,installation,ilmerge,C#,Forms,Localization,Installation,Ilmerge,我正在开发这个表单应用程序,在C#项目中使用本地化,不同的文本条目存储在资源文件(GlobalLanguages.resx和GlobalLanguages.fr.resx)中。这些将被设置为嵌入 在VS 2008的调试/发布中运行应用程序时,一切都很好,当我从VS 2008之外的输出文件夹启动exe时,一切都很好。但是,当我构建VisualStudio安装程序项目以获取安装程序并将其安装到我的机器上时,本地化不起作用。即使安装文件夹中有一个包含.fr.resx值的.dll文件 安装程序项目设置为

我正在开发这个表单应用程序,在C#项目中使用本地化,不同的文本条目存储在资源文件(GlobalLanguages.resx和GlobalLanguages.fr.resx)中。这些将被设置为嵌入

在VS 2008的调试/发布中运行应用程序时,一切都很好,当我从VS 2008之外的输出文件夹启动exe时,一切都很好。但是,当我构建VisualStudio安装程序项目以获取安装程序并将其安装到我的机器上时,本地化不起作用。即使安装文件夹中有一个包含.fr.resx值的.dll文件

安装程序项目设置为包含主项目的本地化输出。将已安装应用程序的当前语言环境输出到日志文件中,确实会给出正确的值,但文本以默认语言显示

我们确实使用IlMerge来合并exe中的几个.dll文件,但是由于可以找到资源的.dll,我想这应该不是问题所在。我真的什么都试过了,但我不知道现在

希望你们能帮忙


谢谢你,试着这样做只是为了诊断:(显然你需要更改类名/名称空间)

如果我运行它的输出,例如:

当前UI区域性:fr

大会资源:

公司、应用程序、语言、资源、资源


“是”->Oui

GlobalLanguages.fr.dll文件是否与exe文件位于同一文件夹中,或位于exe目录下的“fr”目录中?如果你改变这个,它会改变行为吗?它在一个子文件夹“fr”中,就像你说的。我将尝试将其移动到主文件夹,并在我回到电脑后查看它是否有任何作用。感谢您使用与VS下的bin/debug相同的文件夹结构应该是正确的。另外,请确保您在不使用ilmerge的情况下尝试将其排除在等式之外。由于我不在office atm,所以尚未尝试,但我可以确认,在调试文件夹中,资源dll也位于子文件夹“fr”中,因此设置相同。即使安装程序将资源dll放在安装文件夹中,我也会在不合并它的情况下尝试它。谢谢你的提示。试过了,但还是不行。无论如何谢谢你。。。是否有任何方法可以检查本地化资源是否可以访问或存在?感谢您提供的代码片段,稍后我将试用它。现在,我刚刚将这些语言拆分为两个独立的资源文件,并编写了自己的控制器来检索正确的值。我一直在浪费太多的时间寻找解决方案,我在大约两个小时内得到了申请的概念验证截止日期。非常感谢你的帮助。
 Type t = typeof(SomeClassInLanguageAssembly);
 Assembly languageAssembly = t.Assembly;
 Console.WriteLine("Current UI culture: "+Thread.CurrentThread.CurrentUICulture);
 Console.WriteLine("Resources in assembly:");
 languageAssembly.GetManifestResourceNames().ForEach(Console.WriteLine);
 ResourceManager r = new ResourceManager("Language.Assembly.Namespace.ResourceName", languageAssembly);
 Console.WriteLine("'YES' -> " + r.GetString("YES"));