1

在我们的项目中,我们定义了一个自定义配置部分,在项目中被引用时可以正常工作。现在我们尝试从作为参考添加的 dll 中引用相同的配置部分。从这个 dll 中的代码,我们可以毫无问题地访问 ConfigurationManager.AppSettings,但在访问配置条目时会出错。

Web.config 代码

<section name="mailManager" type="FullNamespace, NameSpace" />

<mailManager prop1="propVal1">
    <prop2 key1="keyVal1" key2="keyVal2" key3="keyVal3" />
    <prop3 key1="keyVal1" key2="keyVal2" />
</mailManager>

在引用它的 dll 中,尝试获取配置部分时会引发以下错误。此部分存在于 dll 解决方案和主要解决方案代码库中。

var mailManagerConfigSection = ConfigurationManager.GetSection("mailManager") as EmailManagerConfigSection;

我们得到的错误是错误 CS0433:类型 'EmailManagerConfigSection' 同时存在于 'namespace1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 和 'namespace2, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null '。

dll 引用存在于运行主代码的同一 bin 目录中。无论如何让dll引用具有值的主EmailManagerConfigSection,而不是dll的本地内容,它是空的?我们不想引入任何 dll.config 文件。

4

1 回答 1

1

必须从可执行文件而不是 DLL 定义、加载和引用配置节。

您可以将配置文件的源代码保留在解决方案空间中的 dll 项目中,但是无论 dll 的编译将配置文件放在何处,主机可执行文件(引用 dll)的 app.config 都必须声明并指定文件在它的 app.config [ApplicationName.Exe.config] 只需将配置的适当<ConfigSections> <section>元素和实际部分元素添加到主机可执行文件 app.config 中。

于 2016-07-29T15:17:40.453 回答