6 个解决方案
#1
既然 exe 的运行需要某个 dll,那么这个 dll 就是不可缺少的
只要 exe 能找到这个 dll,那么 dll 放在哪里都无所谓,关键是:找得到
你可以和 exe 放在一起,也可以放到操作系统搜索路径(由环境变量 PATH 指示)中,也可以你自己指定一个目录、也可以包含在 exe 文件中....
只要 exe 能找到这个 dll,那么 dll 放在哪里都无所谓,关键是:找得到
你可以和 exe 放在一起,也可以放到操作系统搜索路径(由环境变量 PATH 指示)中,也可以你自己指定一个目录、也可以包含在 exe 文件中....
#2
怎么让他包含在exe之中
#3
资源里面可以放文件啊,运行时写入到磁盘即可。但是你要解决先有鸡还是先有蛋的问题,因为没有dll你的程序运行不了。除非你的主程序也是释放出来的,要么所有dll都是动态加载的。
#4
。额怎么写入磁盘。。我这边应该是先有鸡吧,我是点击一个按钮的时候才会运行那个dll里面的方法,不点击可以正常运行
#5
解决了 解决方法:在program.cs里面的的头部加入代码 AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
然后在写一个方法 private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string resourceName = "WindowsFormsApp2." + new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
}
WindowsFormsApp2是程序名字 这样就解决了
然后在写一个方法 private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string resourceName = "WindowsFormsApp2." + new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
}
WindowsFormsApp2是程序名字 这样就解决了
#6
哦 对了,还需要把引用的dll文件添加到根目录里面并且将属性里面设置为嵌入文件
#1
既然 exe 的运行需要某个 dll,那么这个 dll 就是不可缺少的
只要 exe 能找到这个 dll,那么 dll 放在哪里都无所谓,关键是:找得到
你可以和 exe 放在一起,也可以放到操作系统搜索路径(由环境变量 PATH 指示)中,也可以你自己指定一个目录、也可以包含在 exe 文件中....
只要 exe 能找到这个 dll,那么 dll 放在哪里都无所谓,关键是:找得到
你可以和 exe 放在一起,也可以放到操作系统搜索路径(由环境变量 PATH 指示)中,也可以你自己指定一个目录、也可以包含在 exe 文件中....
#2
怎么让他包含在exe之中
#3
资源里面可以放文件啊,运行时写入到磁盘即可。但是你要解决先有鸡还是先有蛋的问题,因为没有dll你的程序运行不了。除非你的主程序也是释放出来的,要么所有dll都是动态加载的。
#4
。额怎么写入磁盘。。我这边应该是先有鸡吧,我是点击一个按钮的时候才会运行那个dll里面的方法,不点击可以正常运行
#5
解决了 解决方法:在program.cs里面的的头部加入代码 AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
然后在写一个方法 private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string resourceName = "WindowsFormsApp2." + new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
}
WindowsFormsApp2是程序名字 这样就解决了
然后在写一个方法 private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string resourceName = "WindowsFormsApp2." + new AssemblyName(args.Name).Name + ".dll";
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
{
byte[] assemblyData = new byte[stream.Length];
stream.Read(assemblyData, 0, assemblyData.Length);
return Assembly.Load(assemblyData);
}
}
WindowsFormsApp2是程序名字 这样就解决了
#6
哦 对了,还需要把引用的dll文件添加到根目录里面并且将属性里面设置为嵌入文件