我有一个程序集,它为自定义配置部分提供类结构。有没有办法将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")
时抛出异常,因为它无法找到文件或程序集。
由于
答案 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下,否则会被忽略