|
前陣子我正在一個(gè)小c# WinForms應(yīng)用程序在Visual Studio 2008中。為了簡(jiǎn)化應(yīng)用程序的部署過程,在它的所有組件捆綁成一個(gè)exe文件將使它更容易管理。But-documentation和教程上嵌入dll文件在一個(gè)exe文件是過時(shí)的,不完整的,或者只是沒有工??。 最好的例子很多 摘自一本書,貼在MSDN的博客作者。不幸的是,它不工作,不包括明確的指示或如何實(shí)現(xiàn)它。然而,它仍然提供了一個(gè)很好的起點(diǎn)。經(jīng)過一些研究,反復(fù)試驗(yàn),Visual Studio調(diào)試器的幫助下,這是解決方案。 注意:這個(gè)方法允許您將dll文件到任何子文件夾或一系列的子文件夾在您的項(xiàng)目中,而不需要改變?nèi)魏未a后的事實(shí)。如果你想放棄使用一個(gè)子文件夾(將dll文件在項(xiàng)目的根),或者使用硬編碼的子文件夾路徑包含dll文件(s)相反,有替代方法可能更合適,但是不會(huì)被覆蓋。 1)dll文件本身需要嵌入在Visual Studio項(xiàng)目中,而不是引用。在你的項(xiàng)目中,在項(xiàng)目中創(chuàng)建一個(gè)文件夾存儲(chǔ)dll文件的根(右鍵單擊項(xiàng)目名稱> >添加新文件夾)。我叫“自由”。
3)接下來,包括項(xiàng)目資源dll。右鍵單擊項(xiàng)目名稱>屬性(或項(xiàng)目菜單> yourprojectname 屬性)。去“資源”選項(xiàng)卡。
5)在默認(rèn)情況下,編制項(xiàng)目文件和引用復(fù)制到本項(xiàng)目時(shí)建立的文件夾。這將需要預(yù)防的。在“引用”文件夾,選擇您的dll文件的引用。在properties窗格(或右擊>屬性),尋找屬性命名為“復(fù)制到輸出目錄”,并將值設(shè)置為false。
也尋找屬性“建設(shè)行動(dòng)”,將值設(shè)置為“嵌入的資源”。這表明如何處理文件和訪問項(xiàng)目時(shí)。
6)在WinForm上執(zhí)行的代碼視圖,包括namespaceSystem.Reflections。 這是很重要的一些代碼負(fù)責(zé)加載嵌入式dll文件(年代)。 7)在代碼視圖為您執(zhí)行WinForm上,這段代碼應(yīng)該放在構(gòu)造函數(shù)方法(通常叫一樣的形式)。它需要朝見theInitializeComponent() 方法:
在啟動(dòng)exe,這段代碼負(fù)責(zé)檢測(cè)需要什么樣的dll文件和被引用,和負(fù)載他們從嵌入的位置。 8)在代碼中執(zhí)行WinForms應(yīng)用程序視圖,您現(xiàn)在可以包括dll文件的命名空間(s)。 9)一切為了測(cè)試,您將需要實(shí)現(xiàn)代碼從dll文件的名稱空間(s),以便AssemblyResolve事件觸發(fā)。但是,如果包括代碼從dll的名稱空間(s)在構(gòu)造函數(shù)中,Application.Run() 將拋出一個(gè)“文件未找到”對(duì)你的dll文件錯(cuò)誤當(dāng)WinForms應(yīng)用程序構(gòu)建和執(zhí)行。
|
|
|