2012-08-17 93 views
1

我有一個應用程序,它使用位於x中的充滿gui應用程序代碼的.dll文件。它使用有1個按鈕,但現在有2個。你怎麼知道你的C#應用​​程序正在使用哪個DLL?

當我開始我的應用程序時,我期望看到的是一個帶有2個按鈕的GUI,但是我看到一個帶有1個按鈕的GUI。我已經重建了我的gui.dll,但它奇蹟般地使用了某個地方的舊版本。如果我嘗試和調試我的代碼,它說我使用的代碼版本不同於.dll中的代碼

我的問題是,「我如何知道它在哪裏查找.dll以及爲什麼它會使用舊版本,因爲我只有一個地方,我編譯的.dll?「

也想表明,我有它的引用,它是有2個按鈕的正確版本..但是當我運行它使用另一個版本?

+0

你如何參考DLL?您是否已將其部署到bin目錄或使用COM或將其放入GAC? – Liam 2012-08-17 10:16:20

+0

你如何在你的項目中引用DLL?您可以嘗試右鍵單擊該引用,打開其屬性並選中/取消選中複製本地開關。這些問題通常是通過完全重建所有東西並重新啓動Visual Studio來解決的。 – 2012-08-17 10:18:51

+0

我簡化了這個問題。我的主程序加載一個插件文件,其中有一個dll,其中引用了我後面的dll。它存儲在構建目錄中。讓我困惑的是我刪除了所有舊的引用,但它一直在加載。我會嘗試使用這個模塊窗口,看看是否對所有加載的程序集及其位置有所瞭解。 – pengibot 2012-08-17 13:19:05

回答

3

如果您使用Visual Studio打開模塊窗口,Debug-> Windows-> Modules(Ctrl-D + M),這將列出所有加載的程序集。

您也可以在運行時使用AppDomain.CurrentDomain.GetAssemblies()並遍歷每個Assembly.CodeBase。

如果一切都失敗了,你也可以使用Sysinternals http://technet.microsoft.com/en-us/sysinternals/bb896645中的ProcessMonitor並觀察你的進程加載了哪些dll,但是你會過濾出大量的輸出。

0

你可以嘗試在System.Reflection命名空間使用Reflection

var assembly = Assembly.Load("your-assembly-name"); 

然後檢查版本信息的assembly對象。

1

如果你正在調試你可以打開模塊窗口(調試>的Windows>模塊)。這將向您顯示加載到您的進程中的所有可執行文件,包括名稱和完整路徑。然後,您應該能夠找出加載過期DLL的位置。

相關問題