2011-03-14 69 views
0

我正在使用一種方法在AssemblyResolve事件上加載DLL。這不是我想要的方式。下面是一些代碼:程序集解析沒有完全加載我的DLL?

在我的窗體加載

var a = AppDomain.CurrentDomain; 
a.AssemblyResolve += (object sender, ResolveEventArgs args) => LoadDLL(sender, args, anArg); 

LoadDLL:

public Assembly LoadDLL(object sender, ResolveEventArgs agrs, bool anArg){ 
    //Let's just ignore anArg, it doesn't affect anything related to the problem 
    asseblyPath = @"XXX";//path to my dll 
    return Assembly.LoadFrom(assemblyPath); 
} 

所以,這一切都很好。我爲我的DLL設置Copy Local爲false,所以AssemblyResolve事件被調用,我可以加載我的DLL的所需版本。

正在發生一個奇怪的事情是這樣的:在運行此代碼後,我的代碼試圖從包含全局常量類訪問公共變量(這個類應該在我的DLL)。

public class GCV{ 
    public GCV(){} 
    public string value1= "asdf"; 
} 

不幸的是,當我在調試模式是,GCV.value1設置爲空時,它顯然有在類定義的值。這是我可以在這裏描述的一個症狀,希望足以診斷問題?

謝謝!

+0

GCV.value1不是有效的表達,值1是不是類的靜態成員。 – 2011-03-14 16:45:26

+0

刪除了「組裝」標籤;它用於彙編語言問題。 – 2011-03-14 17:26:24

+0

謝謝重新分類我的問題,我有時可以得到一點點標籤快樂呵 – sooprise 2011-03-14 17:42:04

回答

1

看來,在調試版本,加載在釋放一個IT負載不同。嘗試在調試時查看Output文件夾,然後查找Loaded ....以查找您的dll。這應該指向您所期望的不同版本。

+0

當我點在我的項目目錄下的DLL,它就像你說的會,但是當我複製的bin /調試那些確切的dll文件和把它們放在其他地方並指向複製文件所在的新位置,它仍然存在問題。我該如何補救?感謝您的幫助! :) – sooprise 2011-03-14 16:07:52

+0

好,一招發現問題可以這樣:啓動程序獨立,如果重現該問題,*附上*調試器,即使在附件加載的程序集列表是在輸出選項卡可用,所以你cna發現至極版本被加載。我知道這是不是一個解決方案,只是一種方法找到它:在這種情況下,我們無法猜測問題出在哪裏:) – 2011-03-14 16:27:09

+0

正確的DLL加載,消息寫道:「myApp.vshost.exe」(管理):加載'* dllPath *',加載符號。所以它看起來像它已加載,並加載符號。這有幫助嗎?謝謝! :) – sooprise 2011-03-14 17:50:01