C 將dll打包到程式中

2022-01-11 07:09:07 字數 2201 閱讀 2084

最近比較懶,加上內容也不多就懶得排版了,字放大了,看起來應該方便一點

直接進入主題

先來看乙個栗子,假設現在有乙個第三方dll

namespace

testlibrary1}}

testlibrary1.dll

在專案中引用,然後呼叫其中的方法test,將輸出aaabbbccc

using

system;

namespace}}

效果

但是很顯然,當你把程式發給你的客戶的時候必須要攜帶乙個dll,否則就會這樣

//摘要:

//在對程式集的解析失敗時發生。

public

event resolveeventhandler assemblyresolve;

在這個事件中,可以重新為載入失敗的程式集手動載入

如果你將dll作為資源檔案打包的你的應用程式中(或者類庫中)

就可以在硬碟載入失敗的時候 從資源檔案中載入對應的dll

就像這樣:

class

program

static system.reflection.assembly currentdomain_assemblyresolve(object

sender, resolveeventargs args)

}throw

newdllnotfoundexception(assname);

}//程式進入方法之前會引導程式集,當程式集載入失敗,則會進入currentdomain_assemblyresolve事件

static

void main(string

args)

}

這樣就軟體以乙個exe單獨執行了

以上都是我網上看來了...................

不過如果我有很多dll怎麼辦,總不至於每乙個dll寫乙個分支吧?

所以我準備寫乙個通用的資源dll載入類

原理蠻簡單的,主要是通過stacktrace類獲取呼叫registdll方法的物件,獲取到對方的程式集

然後通過assembly.getmanifestresourcenames()獲取所有資源的名稱

判斷字尾名".dll"(這一步可以自由發揮),然後載入,以載入的程式集的名稱為key儲存到乙個字典中

在程式集載入失敗時,從字典中查詢同名程式集,如果有,直接從字典中載入

**如下:

using

system;

using

system.collections.generic;

using

system.diagnostics;

using

system.reflection;

namespace

blqw

else

}///註冊資源中的dll

/// public

static

void

registdll()

//程式集加入已處理集合

assemblies.add(ass.fullname, null

);

//繫結程式集載入失敗事件(這裡我測試了,就算重複綁也是沒關係的)

//獲取所有資源檔案檔名

var res =ass.getmanifestresourcenames();

foreach (var r in

res)

dlls[da.fullname] =da;

}catch}}}}}

loadresourcedll

C 將dll打包到程式中

有時候我們會使用第三方的庫,好多遊戲也是使用第三方庫,在沒有安裝第三方就會出錯。我們有乙個簡單的方法把dll庫打包程式中 如果我們把dll放到庫中,屬性為資源 我看到blqw把執行從程式找dll寫為 using system using system.collections.generic usin...

C 將dll打包到程式中

本文告訴大家如何把 dll 打包到程式中。很多時候的 軟體 在執行的時候需要包括很多 dll 或其他的檔案,這樣的軟體在給其他小夥伴,就需要做乙個壓縮包,或者用安裝軟體。這樣感覺不太好,所以本文告訴大家乙個方法,把所有的 dll 放在乙個檔案,於是把自己的軟體給小夥伴就只需要給他乙個程式 然後安裝,...

2018 4 29 C 將dll打包到程式中

title author date createtime categories c 將dll打包到程式中 lindexi 2018 04 29 09 43 22 0800 2018 2 13 17 23 3 0800 c 本文告訴大家如何把 dll 打包到程式中。很多時候的 軟體 在執行的時候需要包...