我有一个通过MEF使用DLL的可执行文件。我使用
成功加载每个DLL的配置文件的appsettings键 var appConfig = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
return appConfig.AppSettings.Settings["Version"].Value;
现在我想这样做,因此DLL允许DLL的配置文件中的adhoc项目。
所以我把它添加到配置文件
<configSections>
<section name="AdHocRules" type="BusinessRules.AdHocConfiguration, BusinessRules" />
</configSections>
<AdHocRules BaseRuleNumber="ConfigEx1" RuleName="Config Example" EffectiveDate="5/1/2010" Value="Example" IsValid="true"/>
我创建了一个课程来阅读上述内容。当我在不使用DLL的测试控制台应用程序中运行它时 - 所有内容都被编译在一起,并且单个应用程序配置一切正常
但是 - 我想使用DLL的配置文件而且我一直收到错误
无法投射类型的对象 'System.Configuration.DefaultSection' 输入 “BusinessRules.AdHocConfiguration
这不起作用; - 它正在抛出上述
var cm = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
AdHocConfiguration adhoc = (AdHocConfiguration)cm.GetSection("AdHocRules");
这是代码 - adhoc为null,因为它没有从正确的配置文件加载
AdHocConfiguration adhoc = (AdHocConfiguration)ConfigurationManager.GetSection("AdHocRules");
BusinessRules.Rule r = new BusinessRules.Rule();
r.BaseRuleNumber = adhoc.baserulenumber;
r.RuleName = adhoc.rulename;
r.EffectiveDate = adhoc.effectivedate;
r.Value = adhoc.value;
有什么想法吗?
答案 0 :(得分:0)
为了使用OpenExeConfiguration方法,其他DLL的配置文件需要与MSDN Reference中提到的可执行文件位于同一目录中。
您可能需要一个构建后事件来移动配置文件,但它确实有效。
您也可以使用Assembly.GetAssembly( MEF加载的某种类型 )。而不是Assembly.GetExecutingAssembly()。位置,取决于你如何使用它。
我有一个示例项目,我使用MEF加载部件,并读取他们的配置文件。
如果您仍有问题,请告诉我