在我们的项目中,我们定义了一个自定义配置部分,该部分在项目中被引用时工作正常。现在我们尝试从作为参考添加的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:类型&#39; EmailManagerConfigSection&#39;存在于&namespace; namespace1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null&#39;和&#39; namespace2,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null&#39;。
dll引用存在于运行主代码的同一bin目录中。反正有没有让dll引用主要的EmailManagerConfigSection,它具有值而不是dll的本地值为null?我们不想引入任何dll.config文件。
答案 0 :(得分:1)
必须从可执行文件定义,加载和引用配置节,而不是从DLL。
您可以在解决方案空间中的dll项目中保留配置文件的源代码,但是无论编译器放置配置文件的哪个位置,主机可执行文件的app.config (引用dll)必须声明并在其中指定该文件的app.config [ApplicationName.Exe.config]只需将配置的相应<ConfigSections>
<section>
元素和实际section元素添加到主机可执行文件app.config。