当前位置:  开发笔记 > 编程语言 > 正文

在C#中静态链接

如何解决《在C#中静态链接》经验,为你挑选了2个好方法。

我正在研究CMS的模块.此模块作为类库DLL分发.

我有几个我想在这个模块中使用的实用程序库.无论如何我可以静态链接这些库,所以我不必分发几个DLL(从而单独分发我的实用程序库)?

我想只有一个DLL.



1> Seb Nilsson..:

您可以将许多DLL与ILMERGE合并:

http://research.microsoft.com/~mbarnett/ILMerge.aspx

我自己没试过.希望能帮助到你.


在此处下载:http://www.microsoft.com/downloads/details.aspx?familyid = 22914587-B4AD-4EA- 87CF-B14AE6A939B0&
displaylang = en

简要说明 (来自download-page)
ILMerge是一个用于将多个.NET程序集合并到单个.NET程序集中的实用程序.它适用于可执行文件和DLL,并带有几个选项来控制输出的处理和格式.有关详细信息,请参阅随附文档


不安全的代码就好了.它不会处理混合模式程序集.包含非托管代码的类型,由C++/CLI项目创建.

2> Kaganar..:

如果您不想使用ILMerge,请参阅此页面:

http://blogs.msdn.com/b/microsoft_press/archive/2010/02/03/jeffrey-richter-excerpt-2-from-clr-via-c-third-edition.aspx

编者注:Jeffrey Richter建议将你的dll作为资源放入exe文件中(对于你添加的每个DLL文件,显示其属性并将其"Build Action"更改为"Embedded Resource".).则需要自定义的类装载器,使执行工作(在运行时,CLR将无法找到相关的DLL组件,这是一个问题.为了解决这个问题,当你的应用程序初始化,注册到一个回调方法AppDomain的ResolveAssembly事件).

请务必将resourceName字符串更改为指向实际资源.(例如,更改AssemblyLoadingAndReflection为您的项目名称.)


虽然这需要额外的努力,但这似乎是比接受的答案更好的解决方案.
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有