具有冲突文件名的自定义App.config部分

时间:2012-05-10 17:00:22

标签: .net app-config .net-assembly

项目有一个名为MyNamespace.MyConfig的自定义配置节类。该类存储在C#库MyNamespace.MyAssembly.dll。

该项目还有一个控制台应用程序。客户端希望以与dll相同的方式调用它,即MyNamespace.MyAssembly.exe。

App.config文件具有以下定义:

 <section name="myConfigSection" type="MyNamespace.MyConfig, MyNamespace.MyAssembly"/>

现在的问题是应用程序找不到MyConfig类,因为它在exe文件中查找错误的程序集。

第一个想法是更具体地说明程序集的名称,因此ConfigurationManager知道它应该在dll中而不是在exe中:

 <section name="myConfigSection" type="MyNamespace.MyConfig, MyNamespace.MyAssembly.dll"/>

不幸的是,这没有帮助,应用程序说,它找不到名为MyNamespace.MyAssembly.dll的程序集。

使其工作的唯一方法是将应用程序程序集重命名为MyNamespace.MyAssembly.Console,但客户端不同意这一点。

如何告诉ConfigurationManager它应该在MyNamespace.MyAssembly.dll而不是MyNamespace.MyAssembly.exe中查找我的MyNamespace.MyConfig类?

1 个答案:

答案 0 :(得分:1)

不幸的是,在这种情况下,没有办法指示.NET首先搜索.dll。即使使用像

这样的程序集的全名
<section name="myConfigSection" type="MyNamespace.MyConfig, MyNamespace.MyAssembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=...."/>

它仍将首先检查当前的exe,因为它们共享一个相同的程序集名称。 我建议在不更改项目名称的情况下为配置项目使用不同的输出程序集名称。

enter image description here

然后使用

<section name="myConfigSection" type="MyNamespace.MyConfig, MyNamespace.MyAssemblyConfig />
app.config中的