C# 将Dll嵌入exe中发布
一、制作模版Dll
二、在exe工程中添加Dll
1、添加上述“创建Dll”,并修改属性为:不复制到输出目录的嵌入资源
2、引用“Resource”中的dll文件,并修改属性:不复制到本地
三、添加重载Dll代码
1、添加以下代码
class DependentFiles{/// <summary>/// 载入资源文件中附带的所有dll文件/// </summary>public static void LoadResourceDll(){AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);}private static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args){var assemblyName = Assembly.GetExecutingAssembly().GetName().Name;var nameSpace = assemblyName;//一般程序集名称和默认命名空间是一致的,当不一致的时候你可以用下面的方法。//var nameSpace = typeof(Program).Namespace;var resourceName = string.Format("{0}.Resources.{1}.dll", nameSpace, new AssemblyName(args.Name).Name);using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)){if (stream != null){var assemblyData = new byte[stream.Length];stream.Read(assemblyData, 0, assemblyData.Length);return Assembly.Load(assemblyData);}else{throw new System.IO.FileLoadException(resourceName);}}}}
2、在“Program”中注册使用
移动位置后,同样可以使用。但要注意看别人经验,对于远程等特殊情况,此方法可能失效。