1

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

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

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

谢谢!

4

4 回答 4

1

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

于 2008-12-17T20:02:28.357 回答
0

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

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

于 2008-12-14T20:05:30.193 回答
0

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

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

于 2009-01-01T00:45:41.813 回答
0

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

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

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

于 2009-07-16T10:33:58.543 回答