我想从一个具有自己的
然而,在加载插件后,
我注意到使用
我的插件如下:
app.config
文件的MEF插件中访问ConfigurationManager.AppSettings
对象中的值。然而,在加载插件后,
AppSettings
中不存在来自app.config
文件的键。应用程序加载插件的键仍然存在。我注意到使用
Settings.settings
文件可以通过app.config
文件实现此行为,因此该文件必须以某种方式被加载。我的插件如下:
[Export(IPlugin)]
public class Plugin
{
public Plugin()
{
// reads successfully from app.config via Settings object
var value1 = Settings.Default["Key1"];
// returns null from app.config via ConfigurationManager
var value1 = ConfigurationManager.AppSettings["Key2"]
}
}
app.config
的格式如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="..." >
<section name="Plugin.Settings" type="..." />
</sectionGroup>
</configSections>
<appSettings>
<add key="Key2" value="Fails" />
</appSettings>
<applicationSettings>
<Plugin.Settings>
<setting name="Key1" serializeAs="String">
<value>Works</value>
</setting>
</Plugin.Settings>
</applicationSettings>
</configuration>
我可以通过以下方式手动加载app.config
文件:
var config = ConfigurationManager.OpenExeConfiguration("Plugin.dll");
var value = AppSettings.Settings["Key2"].Value
但这似乎更像是一种变通方法而不是解决方案。
有没有一种方法可以直接从插件内部访问MEF插件的<appSettings>
?
如果没有,那么推荐使用什么方法?
Settings.Default
时,这是否是在“幕后”发生的事情? - g tGetExecutingAssembly()
调用比硬编码 DLL 名称更可取。看起来我会采用这种技术。 - g t