2015-12-15 52 views
0

我試圖執行下面的代碼,看是否裝配始建於調試或發佈模式的麻煩。思考 - 以加載依賴程序集

Assembly assemb = Assembly.LoadFile(fileName); 
bool isDebug = false; 
foreach (object att in assemb.GetCustomAttributes(false)) 
    if (att is DebuggableAttribute) 
     isDebug = ((DebuggableAttribute)att).IsJITTrackingEnabled; 
Console.WriteLine("Assembly is {0}.", isDebug ? "debug" : "release"); 

我能夠沒有任何問題加載程序集(Product.dll)。但是當我試圖執行GEtCustomAttributes(false)方法時,我得到了異常消息。

無法加載文件或程序集「log4net的,版本= 1.2.11.0, 文化=中性公鑰=空」或它的一個依賴。 系統找不到指定的文件。

不知道這是爲什麼尋找依賴程序集。是否因爲建立Product.dll的方式(如優化或其他)?我沒有訪問源代碼Product.dll所以不知道我怎麼能提交其模式(調試或發佈)

+0

你可以用'ReflectionOnlyLoad()'而不是'LoadFile()'來試試,這樣依賴不會被加載嗎? –

回答

0

如果log4net的是你引用的項目強制性的(意思是直接引用的)組件,你必須還加載它,沒有辦法只加載部分的程序集。說了這個引用程序集的代碼如果log4net.dll丟失,它甚至不會編譯,所以它不得不以任何方式加載它。

無論如何obiosly在引用的程序集中定義的任何屬性都需要Loggerlog4net,所以它會搜索該類型。

log4net assembly到您的構建路徑,它應該工作。

3

通常依賴DLL不會被編譯到所得到的DLL。這意味着如果Product.dll編譯時依賴於log4net.dll,它必須位於同一個文件夾中。
應該可以簡單地複製到log4net.dll其中Product.dll位於同一文件夾中。

的依賴性如果在Product.dll定義的類型引用在log4net.dll定義的類型必須被加載。在這種情況下,我強烈懷疑它會是Logger/ILog,因爲通常會包含此行以獲取Logger

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(); 
相關問題