2009-11-07 20 views
2

我有一個程序集爲自定義配置節提供類結構。有沒有辦法將配置部分連接到指向不同目錄中的程序集,或者程序集是否與消費應用程序或GAC位於同一目錄中?如果它可以在不同的目錄中,我將如何/在哪裏指定這樣的目錄?是否有可能創建一個自定義配置部分與程序集在不同的目錄中?

例如:

 
MyConsole.exe 
- lib folder 
- - The custom config assembly. 

編輯:

這裏是我的App.config:

<configSections> 
     <section name="TestCustomSection" type="TestCustomConfigSections.TestCustomSection, TestCustomConfigSections" /> 
</configSections> 
<TestCustomSection message="Test is a subdirectory test." /> 

當TestCustomConfigSections.dll是在同一目錄作爲我的控制檯應用程序,它工作正常。當我將它移動到/ lib時,當我的代碼因爲找不到文件或程序集而調用GetSection("TestCustomSection")時,它會引發異常。

感謝

回答

2

當.NET融合結合您的引用探查請求的DLL時它會通過一些目錄。它們都應該是你的ApplicationBase的子目錄。您可以通過檢查由fuslogvw實用程序生成的融合日誌來查看它們。要啓動該實用程序,可以從Visual Studio Tools菜單打開命令提示符。如果這個探測過程沒有找到你的dll,將會拋出異常

除非探測發生的那一刻你訂閱了AppDomain.AssemblyResolve事件。在這種情況下,您將有機會使用Assembly.Load或Assembly.LoadFrom自行加載程序集。

編輯

它看起來只有當他們在AppDomainSetup PrivateBinPath財產列出的其他目錄。如果您創建域編程,你可以設置該屬性自己,爲主要的AppDomain,你可以將它設置在你的AppConfig文件:

 
<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin;bin\subdir;anotherbin"/> 
     </assemblyBinding> 
    </runtime> 
</configuration> 

的時候,我試圖讓多餘的目錄必須是你應用平臺下,否則它們會被忽略

+0

我試過使用fuslogvw,它顯示我的程序集與當前的exe文件位於同一個目錄中,但是當我將它移動到它丟失的子目錄時。根據你所說的,它應該查看ApplicationBase的子目錄,但似乎並非如此。 – JamesEggers 2009-11-08 03:23:20

+0

將assemblyBinding項目添加到我的配置文件後,效果很好。謝謝! – JamesEggers 2009-11-12 03:11:43

相關問題