C#将Dll嵌入到EXE
2021-04-11 20:38
标签:创建 技术分享 The exec sources prope 直接 thread font 感谢博主的方法: https://blog.csdn.net/lin381825673/article/details/39122257 我之前也看了网上的其他的方法试了都不行 第一种方法就是说用ILMerge打包,执行命令后直接失败。 还有就是将引用的Dll属性改为嵌入式Dll.显示无法嵌入互操作类型,请改用适用的接口。 之后尝试博主的办法: ================================================================================== 在我创建完命令行程序时我居然找不到Resources.resx这个文件,后来浏览工程属性时发现有资源这个选项, 需要手动添加才会有这个文件。
接着选择所需要的dll添加至资源文件,写监听程序 主程序 C#将Dll嵌入到EXE 标签:创建 技术分享 The exec sources prope 直接 thread font 原文地址:https://www.cnblogs.com/cteng-common/p/1324_teng.html public Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string dllName = args.Name.Contains(",") ? args.Name.Substring(0, args.Name.IndexOf(‘,‘)) : args.Name.Replace(".dll", "");
dllName = dllName.Replace(".", "_");
if (dllName.EndsWith("_resources")) return null;
ResourceManager rm = new ResourceManager(GetType().Namespace + ".Properties.Resources",Assembly.GetExecutingAssembly());
byte[] bytes = (byte[])rm.GetObject(dllName);
return System.Reflection.Assembly.Load(bytes);
}
public void Mainmethed()
{
TestClass cc = new TestClass();
ReturnClass bb = new ReturnClass();
ReturnClass resul = cc.TestFunction(bb);
Console.WriteLine(resul.ReturnBool);
Console.WriteLine(resul.ReturnInt);
Console.WriteLine(resul.ReturnString);
}
static void Main(string[] args)
{
Program p = new Program();
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(p.CurrentDomain_AssemblyResolve);
p.Mainmethed();
Thread.Sleep(100000);
}
CurrentDomain_AssemblyResolve不可以设置为static类型,否则里面的GetType()就不可以执行。
Main函数不可以去掉Static,不然找不到程序执行入口。
这个问题居然让我纠结半天。。。最后原来只需要在注册监听事件的时候用p.CurrentDomain_AssemblyResolve作为参数就可以了。
====================================================================================================================================================