如何:使用ConfigurationSection而不通过GetSection调用加载它

时间:2008-12-14 19:48:21

标签: c# configurationsection

我想加载一个特定的ConfigurationSection,但CLR加载程序集的方式给我带来了一些麻烦:

我的CustomConfigurationSection定义在一个特定的程序集上,整个程序集加载都找不到,因为我使用的是一个外部工具,它基本上加载我的程序集,通过反射发现它的一些信息然后尝试“安装“它。与尝试安装Windows服务时的installutil非常相似。

我疯了,因为ConfigurationManager试图在原始进程的位置下找到ConfigurationSection所需的程序集。我确实知道这一点,因为我正在使用SysInternals Process Monitor。有人可以提供一些解决方法或指示吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

如果您知道程序集的路径,那么您应该尝试ConfigurationManager.OpenExeConfiguration(exePath)。

答案 1 :(得分:0)

如果您的程序集需要反序列化您的自定义配置部分,但CLR找不到程序集,那么我认为您运气不好(或者我是否误解了这个问题?)。

有什么方法可以让CLR找到你的程序集(可能提供一个提示路径)?如果没有,也许你最好为这些数据使用单独的XML文件,而不是使用app.config / web.config。

答案 2 :(得分:0)

我正面临着类似的问题。几个DLL被加载到一个主应用程序dynamiccaly中。其中一些dll需要一个配置文件,而我正在使用默认的ConfigurationManager来处理它。我可以成功检索正确的文件(基于后缀为“.config”的dll名称)并使用AppSettings和ConnectionStrings中的设置。

现在我正在尝试加载自定义配置部分。运行时抱怨在dll中找不到节类型。我已在配置文件中指定了正确的dll(在configSections条目中),我知道dll已加载,因为该dll实际上是插件本身。但是仍然;看起来运行时只使用GAC / bin目录中的类型来查找配置节。

如此简单:我尝试加载一个自定义配置部分,该部分在与尝试加载它的代码相同的dll中指定,但它不起作用。

答案 3 :(得分:0)

为什么在加载程序集(定义配置部分)之前尝试访问配置部分?您是否使用配置部分来定义装配的位置?如果是这样,那么你正在玩循环引用。

定义自定义配置部分的代码可以非常独立。它可以是自己的组装。我建议将此代码分离到自己的程序集中,并将其安装在GAC或运行时路径中。我不知道为什么你需要一个外部工具来“加载”读取自定义配置部分所需的代码。