【发布时间】:2008-09-02 09:44:16
【问题描述】:
我正在为 CMS 开发一个模块。该模块作为类库 DLL 分发。
我想在这个模块中使用几个实用程序库。无论如何我可以静态链接这些库,这样我就不必分发多个 DLL(从而分别分发我的实用程序库)?
我希望只有一个 DLL。
【问题讨论】:
标签: c# visual-studio-2008 linker
我正在为 CMS 开发一个模块。该模块作为类库 DLL 分发。
我想在这个模块中使用几个实用程序库。无论如何我可以静态链接这些库,这样我就不必分发多个 DLL(从而分别分发我的实用程序库)?
我希望只有一个 DLL。
【问题讨论】:
标签: c# visual-studio-2008 linker
您可以使用 ILMERGE 合并您的许多 DLL:
http://research.microsoft.com/~mbarnett/ILMerge.aspx
我自己没试过。希望对您有所帮助。
简要说明 (来自下载页面)
ILMerge 是一个用于将多个 .NET 程序集合并为一个 .NET 程序集的实用程序。它适用于可执行文件和 DLL,并带有几个用于控制输出处理和格式的选项。有关详细信息,请参阅随附的文档。
【讨论】:
如果您不想使用 ILMerge,请参阅此页面:
编者注:Jeffrey Richter 建议将您的 dll 作为资源放入 exe 文件中(对于您添加的每个 DLL 文件,显示其属性并将其“构建操作”更改为“嵌入式资源” 。”)。然后需要一个自定义类加载器来使可执行文件工作(在运行时,CLR 将无法找到依赖的 DLL 程序集,这是一个问题。要解决这个问题,当您的应用程序初始化时,注册一个回调AppDomain 的 ResolveAssembly 事件的方法)。
请务必更改resourceName 字符串以指向您的实际资源。 (例如,将 AssemblyLoadingAndReflection 更改为您的项目名称。)
【讨论】:
对此的简短回答是否定的! 您不能在编译期间链接到 dll。 我不知道是否有一些微妙的方法可以做到这一点,但您可能必须将 dll 与您的 cms 一起分发。 做到这一点的最好方法是进行某种可再分发。
【讨论】: