2009-04-30 27 views
1

我想這樣的設置:如何更改.NET中引用的加載路徑?

+- /ApplicationFolder 
    -- App.exe 
    -- Core.dll 
    -- AnotherShared.dll 
    +- /PluginsFolder 
    -- plugin1.dll 
    -- plugin2.dll 

但因爲Core.dll和Shared.dll plugin1.dll引用當我編譯應用程序,它滴「Copy.dll」和「Shared.dll副本「以插入文件夾以及如果我刪除它不再工作。

我該如何解決這個問題?

回答

5

當您創建AppDomain時,您可以定義加載程序集的路徑。設置AppDomainSetup.PrivateBinPath並傳遞到AppDomain.Create域。

使用AppDomain是插件的一個好主意(允許不同的CAS和卸載)。

爲避免VS/msbuild將引用程序集複製到輸出目錄,請在引用的屬性中將「Copy Local」更改爲false。

+0

我使用MEF,我我會嘗試弄清楚如何在MEF中執行此操作 – 2009-04-30 11:16:41

1

我的MEF應用程序已設置,以便插件項目編譯到自己的文件夾(因爲它是默認的),然後我使用後生成命令將特定文件複製到輸出擴展文件夾。

另一種方法是將項目直接構建到適當的輸出文件夾中,並如另一張海報所說,打開插件項目中每個相關引用的「屬性」面板,並將「複製本地」設置爲false。

1

你可以試試這個:How can I set PrivateBinPath in MEF?

,或者你可以嘗試處理時引發隨時隨地.NET着定位組件Appdomain.AssemblyResolve事件。在那裏你可以實現自定義邏輯從任何地方查找和加載程序集。

的AssemblyResolve事件處理程序僅僅指剛返回,要麼是beeing尋找或零組件,這樣您就可以從可從AppDomain.GetAssemblies()方法返回已加載Core.dll。

然而,在你的情況下,它應該沒問題根本就沒有包括Code.dll與plugin1.dll,.NET應該已經認識到,Core.dll被加載並使用該實例