2014-01-08 31 views
1

使用C#,VS2012,Windows服務器2012r2指着一個EXE到DLL可執行文件的目錄以外的

我做了這方面的一些搜索,我想我已經知道答案,但希望有人可以讓我知道,如果我是對的。

我有一個網站,在bin文件夾中有一個dll。我也有幾個可執行工具按需或按計劃運行,幾乎所有這些工具都使用與wesbite相同的dll。或者說,他們使用駐留在每個exe文件夾中的dll副本。

這很麻煩,因爲任何時候我更新該網站的DLL,所有這些exe文件現在使用的是舊版本的dll。所以我想,如果我可以指向所有的exe的網站bin文件夾,並在那裏使用dll。

如果可能的話,我寧願不修改windows PATH值。如果是這樣,它看起來會需要使用一個名爲LoadLibrary的函數?我幾乎不做任何Windows編程,所以我不熟悉這一點。這是唯一的(或最好的)方式嗎?

我發現這個博客帖子:http://blogs.msdn.com/b/jonathanswift/archive/2006/10/03/dynamically-calling-an-unmanaged-dll-from-.net-_2800_c_23002900_.aspx

我剛剛創建NativeMethods類,然後調用GetProcAddress每個方法/函數,我需要打電話?

我希望有一種方法,基本上只是告訴EXE在app.config中查找特定的文件夾中的DLL。這不可能嗎?

感謝

+1

您的DLL是託管還是非託管DLL? – LostInComputer

+2

您可能嘗試將DLL放在某處,然後在每個應用程序bin目錄中創建符號鏈接(需要Vista或更高版本)。更新應只需要替換單個鏈接目標。我認爲這應該起作用,但我沒有很多Windows上的符號鏈接經驗,而且Windows似乎也沒有爲他們提供很好的工具/管理支持。 –

+0

託管 - 全部在.net/C中完成# – merk

回答

2

好像你的DLL是因爲你說你幾乎沒有做任何的Win32 API編程託管DLL(建立在.NET)。

一個解決方案是安裝您的DLL在GAC。然後,每次更新DLL程序集版本並部署到GAC時,都必須重定向您的應用程序以使用最新版本。 See this

+0

是的 - 全部在.net/C#中完成。我想我會嘗試像Michael Burr在評論中建議的那樣做符號鏈接,因爲這似乎更簡單一些,也意味着我可以使用常規文件副本更新dll。如果這不起作用,我會嘗試部署到GAC。謝謝 – merk

相關問題