C# 包括引用的程序集,而不必将应用程序保留在与引用的程序集相同的目录中

C# 包括引用的程序集,而不必将应用程序保留在与引用的程序集相同的目录中,c#,winforms,reference,C#,Winforms,Reference,我正在将HTMLAgilityPack与我的C#winform应用程序一起使用。我使用visualstudio从硬盘加载了HTMLAgilityPack,作为引用程序集。然后我构建我的应用程序并将输出的可执行文件复制到一个新目录。如果HTMLAgilityPack与我的输出可执行文件不在同一目录中,尝试运行我的可执行文件时出错,表示“找不到引用”。是否有某种方法将引用嵌入到可执行文件中,以便用户在希望移动文件时不需要随身携带HTMLAgilityPack 我期待着您的回复 埃文:是的,你可以这样

我正在将
HTMLAgilityPack
与我的C#
winform
应用程序一起使用。我使用
visualstudio
从硬盘加载了HTMLAgilityPack,作为引用程序集。然后我构建我的应用程序并将输出的可执行文件复制到一个新目录。如果HTMLAgilityPack与我的输出可执行文件不在同一目录中,尝试运行我的可执行文件时出错,表示“找不到引用”。是否有某种方法将引用嵌入到可执行文件中,以便用户在希望移动文件时不需要随身携带HTMLAgilityPack

我期待着您的回复


埃文:是的,你可以这样做,但这并不简单。您将订阅
AppDomain.CurrentDomain.AssemblyResolve
事件,在引发时,检查它是否正在查找html agility pack(通过事件参数),然后从嵌入的资源中获取程序集BLOB,使用
assembly.Load(theBlob)
,并返回
assembly
实例

另一个更简单的方法可能是


最后,GAC将避免需要将文件放在本地。。。但需要将其正式集中安装。老实说,我会在这里避免GAC。

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


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

那么目标是拥有一个独立的exe?或者,您是否遇到部署的应用程序缺少一个或多个DLL的问题?一个好的应用程序很少“只是一个文件”。有一堆.dll、一个.config和其他支持文件是很常见的。习惯于移动文件夹。@Henk谢谢你,我想我可能不得不接受这个想法,继续前进。所以Marc,我知道你刚刚发布的所有东西都确实有效。我不得不问——强迫我的用户携带额外的行李是否更明智?我不想在我的余生中使用ilmerge…@Evan我个人只需要部署2个文件。