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