在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设置。
我尝试将ResXFileCodeGenerator
和GlobalResourceProxyGenerator
用于“自定义工具”生成器。我还尝试了一些“Build Action”选项,包括Compile,但到目前为止只有Embedded Resource有效。除此之外,我不知道还有什么可以尝试,或者我是否在正确的轨道上。实际上并没有那么多设置可供使用。
我知道在构建DLL之后有一个variety of tools可能会这样做,但我正在寻找一个编译时解决方案。从维护的角度来看,第三方工具具有挑战性 - 我不会是唯一更新此库的人。
答案 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
如果您对这两种方法有任何疑问,请不要犹豫与我们取得联系。我很乐意根据您的反馈改进帖子。