如何将本地化DLL(MyLibrary.resources.dll)编译成单个DLL?

时间:2014-04-04 23:24:49

标签: c# .net visual-studio-2012 localization

在VS2012中使用C#.NET与COM互操作,我正在开发一个公共库,用于其他几个程序。为了保持集成简单,我想将整个库保留为一个DLL。该库的一个功能是本地化。它有多种语言的字符串表,每种语言都有自己的ResX文件。

目前,正在为每种语言创建MyLibrary.resources.dll并将其放在自己的子目录中,如下所示:

Release\MyLibrary.dll
Release\ja\MyLibrary.resources.dll
Release\fr\MyLibrary.resources.dll

我想看到的只是这个:

Release\MyLibrary.dll

以下是我目前的ResX设置。

ResX settings

我尝试将ResXFileCodeGeneratorGlobalResourceProxyGenerator用于“自定义工具”生成器。我还尝试了一些“Build Action”选项,包括Compile,但到目前为止只有Embedded Resource有效。除此之外,我不知道还有什么可以尝试,或者我是否在正确的轨道上。实际上并没有那么多设置可供使用。

我知道在构建DLL之后有一个variety of tools可能会这样做,但我正在寻找一个编译时解决方案。从维护的角度来看,第三方工具具有挑战性 - 我不会是唯一更新此库的人。

1 个答案:

答案 0 :(得分:1)

将库嵌入单个DLL或可执行文件有两种主要方法。第一个使用ILMerge,将所有组件组合在一起,就像它是一个组件一样;第二种是在运行时动态加载来自嵌入式资源的依赖项(提供更多的灵活性,但有其自己的优缺点)。示例项目旨在可移植(唯一的依赖项是Powershell - 项目中包含所有必需的库)。

了解这两种技术之间的区别非常重要。我已经写过一些文章,概述两种方法,并在github上为两种方法提供示例项目。

<强>文章:

Assembly Loading: Combine Assemblies & Executables Using ilMerge

AND

Assembly Loading: Dynamic Assembly Loading & Compression

示例项目:

Application Demonstrating Both ILMerge and Runtime Loading of Embedded Assemblies

如果您对这两种方法有任何疑问,请不要犹豫与我们取得联系。我很乐意根据您的反馈改进帖子。