是否可以使用不同目录中的程序集创建自定义配置节?

时间:2009-11-07 16:17:32

标签: .net configuration

我有一个程序集,它为自定义配置部分提供类结构。有没有办法将config部分连接到指向不同目录中的程序集,或者程序集必须与使用应用程序或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")时抛出异常,因为它无法找到文件或程序集。

由于

1 个答案:

答案 0 :(得分:2)

当.NET融合绑定您的引用时,它会在探测请求的dll时通过许多目录。所有这些都应该是ApplicationBase的子目录。您可以通过检查fuslogvw实用程序生成的融合日志来查看它们。要启动该实用程序,可以从Visual Studio“工具”菜单中打开命令提示符。如果此探测过程未找到您的dll,则会抛出异常

除非发生探测,否则您订阅了AppDomain.AssemblyResolve事件。在这种情况下,您将有机会使用Assembly.Load或Assembly.LoadFrom自行加载程序集。

修改

只有在AppDomainSetup PrivateBinPath属性中列出它们时,它才会查看其他目录。如果您以编程方式创建域,则可以自己设置该属性,对于您可以在appconfig文件中设置它的主应用程序域:

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

我试图让额外的目录必须在你的appbase下,否则会被忽略