代码之家  ›  专栏  ›  技术社区  ›  JamesEggers

是否可以使用程序集在其他目录中创建自定义配置节?

  •  2
  • JamesEggers  · 技术社区  · 16 年前

    我有一个为自定义配置节提供类结构的程序集。是否有方法连接配置节以指向不同目录中的程序集,或者程序集必须与使用应用程序或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 回复  |  直到 16 年前
        1
  •  2
  •   mfeingold    16 年前

    当.NET Fusion绑定您的引用时,它会在探测请求的DLL时通过许多目录。所有这些都应该是ApplicationBase的子目录。您可以通过检查fuslogvw实用程序生成的融合日志来查看它们。要启动该实用程序,可以从Visual Studio“工具”菜单打开命令提示。如果此探测进程找不到您的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>
    

    我试图让额外的目录位于您的appbase下,否则它们将被忽略。

    推荐文章