CRM 2011,ILMerge和本地化

Sha*_*aan 5 ilmerge localization dynamics-crm-2011

我在将本地化附属程序集合并到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 ...

Sha*_*aan 0

我们最终处理此问题的方法是将本地化 XML 文件(由 Visual Studio 生成)添加为 CRM 资源,并创建一些自定义代码来查找适当的资源,然后查找内部的本地化文本。

显然,这并不像仅使用生成的 C# 本地化类那么简单,并且需要一些准备工作。然而,随着准备工作的到位和使用nameof它现在几乎和前面提到的资源类一样简单。