背景:Merging dlls into a single .exe with wpf编译/合并DLL到独立的EXE与WPF
我怎么合并一个.dll引用到.exe文件,我看了上面的帖子,得到了其背后的原则,但我不能够弄清楚如何做到这一点(我是新手,抱歉) 参考文件是HtmlagilityPack.dll
目前我App.xaml.cs包含:
public partial class App : Application
{
public App(){
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly);
// proceed starting app...
}
static Assembly ResolveAssembly(object sender, ResolveEventArgs args)
{
//We dont' care about System Assembies and so on...
if (!args.Name.ToLower().StartsWith("Html")) return null;
Assembly thisAssembly = Assembly.GetExecutingAssembly();
//Get the Name of the AssemblyFile
var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll";
//Load form Embedded Resources - This Function is not called if the Assembly is in the Application Folder
var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name));
if (resources.Count() > 0)
{
var resourceName = resources.First();
using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName))
{
if (stream == null) return null;
var block = new byte[stream.Length];
stream.Read(block, 0, block.Length);
return Assembly.Load(block);
}
}
return null;
}
}
还有什么地方我应该做出改变?,我正在尝试过去一个小时http://blog.mahop.net/post/Merge-WPF-Assemblies.aspx的一个例子,但无法弄清楚如何用HtmlAgilityPack来做到这一点。
错误是什么?你的应用中发生了什么? –
应用程序编译,但该DLL文件没有包含在EXE中,当我尝试作为一个独立的(从文件夹中删除HtmlAgilityPack.dll)运行该EXE,它退出说明一些error.i已尝试设置break-在上面的代码点和我的程序永远不会输入上面的wriiten代码。为什么? – TarunG
我认为你应该更仔细地调试这个应用程序的初始负载,看看AssemblyResolve事件正在寻找哪些其他程序集。这行很可能是你的问题的关键:if(!args.Name.ToLower()。StartsWith(“Html”))return null; - 加载htmlAgilitypack时,您可能需要加载其他依赖项。你不应该简单地返回null,任何“AssemblyResolve”的执行都意味着当前的AppDomain正在寻找一个引用。 –