包含引用的程序集,而不必将应用程序保存在与引用的程序集相同的目录中

时间:2011-09-12 04:39:44

标签: c# winforms reference

我在我的C#HTMLAgilityPack应用程序中使用winform。我使用Visual Studio从我的硬盘驱动器加载HTMLAgilityPack作为参考程序集。然后我构建我的应用程序并将输出可执行文件复制到新目录。如果HTMLAgilityPack与输出可执行文件不在同一目录中,则在尝试运行我的可执行文件时会发生错误,指出无法找到“引用”。有没有办法将引用嵌入到可执行文件中,这样用户无论何时希望移动文件都不需要随身携带HTMLAgilityPack?

我期待您的回复,

埃文

2 个答案:

答案 0 :(得分:3)

是的,你可以这样做 - 但这并非完全无足轻重。你会订阅AppDomain.CurrentDomain.AssemblyResolve事件,当提出时,检查它正在寻找html敏捷包(通过事件args),然后从嵌入式资源中获取程序集BLOB,使用Assembly.Load(theBlob)返回 Assembly个实例。

另一种更简单的方法可能是ilmerge.exe

最后,GAC将避免在本地拥有该文件的需要......但需要将其正式安装在中央。说实话,我会在这里避开GAC。

答案 1 :(得分:1)

您可以使用ILMerge实用程序将多个程序集编译为单个文件

ILMerge.exe / t:winexe /out:test.exe test1.exe test2.dll