相关疑难解决方法(0)

ILMerge和本地化资源程序集

我们有一个应用程序,其编译时的结构如下所示:

    • NB-NO
      • Text.resources.dll
    • SV-SE
      • Text.resources.dll
    • Bar.dll
    • foo.exe的
    • Text.dll

是否可以在此使用ILMerge?你会怎么做?

resources ilmerge assemblies localization satellite-assembly

11
推荐指数
2
解决办法
3309
查看次数

ILMerge +本地化资源程序集

我正在使用ILMerge从包含1个exe和2个资源dll的项目中创建单个程序集应用程序:

  • \ BIN \调试\ test.exe的
  • \ BIN \调试\ NL-BE\test.resources.dll
  • \ BIN \调试\ FR-FR\test.resources.dll

这是一个简单的测试项目,有1个表单(Form1.cs),所以没什么特别的.我的目标是使用工作资源管理器创建一个单独的程序集应用程序(我已阅读ILMerge和本地化资源程序集以及单程序集多语言Windows窗体部署(ILMerge和附属程序集/本地化) - 可能吗?有关如何执行的信息这个).

编译项目后,我使用以下命令行参数运行ILMerge:

ilmerge /log:test.txt /target:winexe /copyattrs /allowdup /out:test_merged.exe 
"C:\projectdir\bin\Debug\test.exe" "C:\projectdir\bin\Debug\fr-FR\test.resources.dll" 
"C:\projectdir\bin\Debug\nl-BE\test.resources.dll"
Run Code Online (Sandbox Code Playgroud)

如果我使用Reflector检查合并程序集的内容,我在资源树节点下看到以下内容:

  • test.Form1.fr-FR.resources
  • test.Form1.fr-FR.resources
  • test.Form1.resources
  • test.Properties.Resources.resources

而不是fr-FR和nl-BE资源,我有2倍的fr-FR资源.这是因为资源dll的名称相同吗?结果是我只能在运行时获取fr-FR资源.

有任何想法吗 ?

更新(日志文件内容):(注意:二进制文件以"loc_"为前缀,为了清楚起见,我在之前的帖子中将它们删除了)

ILMerge version 2.10.526.0
Copyright (C) Microsoft Corporation 2004-2006. All rights reserved.
ILMerge /log:loc_test.txt /target:winexe /copyattrs /allowdup /out:loc_test_merged.exe c:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\loc_test.exe C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\fr-FR\loc_test.resources.dll C:\Users\<user>\Documents\Visual Studio 2008\Projects\loc_test\loc_test\bin\Debug\nl-BE\loc_test.resources.dll 
Set platform to 'v2', using directory 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\..\v2.0.50727' for mscorlib.dll
Running on Microsoft (R) .NET Framework …
Run Code Online (Sandbox Code Playgroud)

c# ilmerge .net-2.0 winforms

7
推荐指数
1
解决办法
3945
查看次数

进行多语言用户控制

我正在开发一个用户控件,现在(在工作结束时)我正面临着使它成为多语言的问题.我想我可以这样做:

  1. 对于UI部分,我可以设置Localizable = true控件,让VS生成我需要的默认语言的所有"记录".
  2. 然后我必须手动添加我用于动态菜单,消息等的所有字符串
  3. 最后,我需要为我需要的语言创建所有资源文件

所以使用MSDN中的代码

Assembly myAssembly = this.GetType().Assembly;
ResourceManager mgr = new ResourceManager("namespace.resource", myAssembly);
mgr.GetString(...) 
Run Code Online (Sandbox Code Playgroud)

我的工作可以(轻松)完成.
但我有一些问题:

  1. 当我从最终用户使用我的控件(生成的DLL)时,new ResourceManager(...)由于目标应用程序中的主命名空间更改,我是否可以使用?
    考虑我不知道最终用户将使用哪个命名空间.
  2. 当我创建语言资源时,VS会生成附属程序集:有没有办法可以将这些文件"集成"到目标DLL中?
    我想尽可能只部署一个文件......
  3. 有没有更好的方法来完成我的任务?
  4. 在开发多语言控件时,有什么我真的需要关心的吗?

感谢大家


更新:(感谢@ lak-b的一些建议)

经过一些研究后我回答了一些问题:

  1. 这是真的,我可以硬编码命名空间,当最终用户将我的控件放在他的表单上时,它不会被更改
  2. 好吧,似乎没有一个简单的方法.
    无论如何,这个SO帖子提供了一个很好的教训和一个很好的解
  3. ...不,对于这个问题,我还在等待有人告诉我一个更好/更简单的方法
  4. 从lak-b中指定了一些关键点.
    还有什么我不得不担心的吗?

再次感谢

c# multilingual user-controls winforms

5
推荐指数
1
解决办法
2288
查看次数

CRM 2011,ILMerge和本地化

我在将本地化附属程序集合并到CRM2011的插件DLL中时遇到了一些麻烦.

要么是,要么我不知道如何使用合并后的资源.

我创建了一些插件并创建了一个基本资源文件(默认 - 英语)和一个特定文化(在编写波兰语本地化时,但后来我还需要添加法语).

我确保不要对组件本身进行签名,因为ILMerge将签署完成的组件本身.

这是我用来合并额外附属程序集的命令:

ilmerge /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 /log:log.txt /keyfile:KeyFile.snk /out:Plugins.dll DynamicsCRM2011.Plugins.dll pl-PL\DynamicsCRM2011.Plugins.resources.dll
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,插件是在.NET 4.0中,我已经获得了ILMerge所需的.config文件,以便使用所需的程序集进行合并.

生成的文件显示正常,我可以使用CRM插件管理员注册,添加新步骤等等.

但是,它将始终使用默认语言.我试过改变了System.Threading.Thread.CurrentThread.UICulture,但这没有用.当我创建一个ResourceManager类并使用时GetString("ErrorMessage", new System.Globalization.CultureInfo("pl-PL")),我得到Exception了指定的ResourceManager不知道如何处理指定的文化.

在这里知道这个问题.但是,发布的解决方案似乎是一个旧的解决方案.生成的资源.cs文件不使用ComponentResourceManager.此外,在那里发布的部分代码已被标记为已弃用.

我不确定我现在要做什么,或者如何进一步调试这个,因为我在处理程序集本身方面经验很少.请帮助我控制那些卫星组件.


更新:

我一直在使用沙盒插件一段时间了,因此我不再能够访问诸如此类的东西CurrentCulture(或者至少我无法改变这些东西).我已经尝试再次解决这个问题:我创建了一个简单的插件,在保存新帐户时会触发该插件.没有什么花哨.这是实际的插件代码:

        ResourceManager rm = new ResourceManager(typeof(Properties.Resources));
        var s = rm.GetString("ErrorAlreadyPosted", new System.Globalization.CultureInfo("pl-PL"));
        throw new InvalidPluginExecutionException(s);
Run Code Online (Sandbox Code Playgroud)

该代码不再抛出有关无法找到指定的文化......也是很明显的代码抛出一个最后的异常的异常,但重要的是什么异常消息.我希望它是波兰语.

唉,事实并非如此.返回的字符串GetString仍然是英文.

我用于ILmerge的命令与之前相同,但是/lib指定了参数,以便我不必复制所有CRM SDK dll ...

ilmerge localization dynamics-crm-2011

5
推荐指数
1
解决办法
1460
查看次数

是否可以在.NET资源文件中使用多种语言?

我们有一个有趣的要求,我们要在运行时支持多种语言,因为我们是一项服务.如果用户使用日语或英语与我们交谈,我们将希望以适当的语言回复. FxCop喜欢我们将我们的字符串存储在资源文件中,但我很想知道是否有一种集成方式可以在运行时选择资源字符串而无需手动执行.

结论:我们需要能够在一个二进制文件中支持多种语言.:)

.net localization

1
推荐指数
1
解决办法
1609
查看次数