gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:39:22 32 4
gpt4 key购买 nike

在 VS2012 中使用 C# .NET 和 COM 互操作,我正在开发一个用于其他几个程序的公共(public)库。为了简化集成,我想将整个库缩减为一个 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 作为“自定义工具”生成器。我还尝试了一些“构建操作”选项,包括编译,但到目前为止只有嵌入式资源有效。除此之外,我不确定还能尝试什么,或者我是否走在正确的轨道上。没有那么多设置可以使用。

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

最佳答案

将库嵌入到单个 DLL 或可执行文件中的方法主要有两种。第一个使用 ILMerge,将所有程序集组合成一个程序集;第二种是在运行时从嵌入式资源动态加载依赖项(提供更多的灵 active ,但有其自身的优点和缺点)。示例项目旨在可移植(唯一的依赖项是 Powershell——所有必需的库都包含在项目中)。

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

文章:

Assembly Loading: Combine Assemblies & Executables Using ilMerge

Assembly Loading: Dynamic Assembly Loading & Compression

示例项目:

Application Demonstrating Both ILMerge and Runtime Loading of Embedded Assemblies

如果您对这两种方法有任何疑问,请随时与我们联系。我很乐意根据您的反馈完善帖子。

关于c# - 如何将本地化 DLL (MyLibrary.resources.dll) 编译成单个 DLL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22874634/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com