1. 程式人生 > >C# 嵌入dll

C# 嵌入dll

resolv appdomain his 一個 我們 文件 跟著 完成後 replace

  在很多時候我們在生成C#exe文件時,如果在工程裏調用了dll文件時,那麽如果不加以處理的話在生成的exe文件運行時需要連同這個dll一起轉移,相比於一個單獨幹凈的exe,這種形式總歸讓人不爽,那麽有辦法讓生成的軟件中直接就包含這個dll文件嗎,這樣就可以不用dll跟著exe走了,避免單獨不能運行的情況。

答案是有的!

技術分享圖片

在工程項目目錄下找到Resources.resx文件並點擊,然後按下面操作,添加資源,將你要加入的dll添加進來。

技術分享圖片

操作完成後,就會在下面的內容框裏看到你添加進來的dll。

技術分享圖片

然後在工程中加入下面這個函數代碼:

1    System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
2         {
3             string dllName = args.Name.Contains(",") ? args.Name.Substring(0, args.Name.IndexOf(,)) : args.Name.Replace(".dll", "");
4             dllName = dllName.Replace(".", "_");
5 if (dllName.EndsWith("_resources")) return null; 6 System.Resources.ResourceManager rm = new System.Resources.ResourceManager(GetType().Namespace + ".Properties.Resources", System.Reflection.Assembly.GetExecutingAssembly()); 7 byte[] bytes = (byte[])rm.GetObject(dllName);
8 return System.Reflection.Assembly.Load(bytes); 9 }

在InitializeComponent();之前調用。這樣生成的exe就包含這個dll文件啦。

1   public Form1()
2         {
3             this.StartPosition = FormStartPosition.CenterScreen;
4             AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
5             InitializeComponent();
6         }

C# 嵌入dll