C#将引⽤的dll嵌⼊到exe⽂件中
通过⽹上查询,将引⽤的dll,嵌⼊到exe项⽬中,通过编译为单⼀的exe⽂件。
工商营业执照1. 引⽤dll,将引⽤的dll设置为不复制(是否复制不影响使⽤,编译完成后,只需要exe就可以了, 旁边的dll是否存在并不影响使⽤)。
宝宝拉肚子吃什么好2. 将引⽤的dll嵌⼊到项⽬中。
新建⼀个项⽬⽂件夹,将引⽤的dll复制到此⽂件夹中,并包含中项⽬⾥,设置为“嵌⼊的资源;”
3. 在main()⽅法中,添加代码,处理不到dll的相关异常处理。
static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
有关读书的成语Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new frmMain());
}
private static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs e)
{
//项⽬的命名空间为myapp, 嵌⼊dll资源在libs⽂件夹下,所以这⾥⽤的命名空间为: myapp.libs.
psp侠盗猎车自由城秘籍string _resName = "myapp.libs." + new AssemblyName(e.Name).Name + ".dll";
using (var _stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(_resName))
{
男主角很冷的小说byte[] _data = new byte[_stream.Length];
_stream.Read(_data, 0, _data.Length);
return Assembly.Load(_data);
}
}
常规情况 下, 按以上3步操作,嵌⼊dll资源⽣成单⼀的exe⽂件就完成了。
今天写的新项⽬中,主窗体不是标准库的Form对象,遇到新的问题了,⼀开始执⾏程序就提⽰不到dll的错误,通过设置断点发现,项⽬在开始执⾏main()时,还没进⼊main()中的代码,直接提⽰不到dll。
经过查询资料、多次测试,猜测是在执⾏main()的时候,提前检测main()内的代码使⽤的引⽤资源,⽽不是执⾏到该⾏代码时才检查相关引⽤资源,于是在main中调⽤另⼀个func避开检测。
/// <summary>
/// 应⽤程序的主⼊⼝点。
/// </summary>
[STAThread]
static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
BeginRun();
高污开车名场面}
static void BeginRun()
{
var _form1 = new frmMain();
Application.Run(_form1);
}
按此改动后,程序运⾏正常。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论