我正在为另一个应用程序创建一个插件作为DLL,它需要具有可以在不重新编译DLL的情况下进行配置的设置。我通过Visual Studio创建了一个设置类,就像我通常使用的应用程序项目一样。当我构建我的项目时,会创建一个libraryname.dll.config文件并直接复制到输出。
但是,正如其他人已经发现和写过的那样,这个文件从未使用过。相反,如果我想修改这些DLL设置,我需要将设置合并到设置文件中,以用于任何使用DLL的应用程序。
我遇到的问题是调用应用程序不是我的应用程序,所以我宁愿将插件的配置与我的插件的其余文件一起使用。
过去我曾使用System.Configuration.ConfigurationManager.OpenExeConfiguration()
来读取DLL的设置文件。
public static string GetSettingValue(string key)
{
string assemblyPath = System.Reflection.Assembly.GetExecutingAssembly().Location;
var config = ConfigurationManager.OpenExeConfiguration(assemblyPath);
var keyVal = config.AppSettings.Settings[key]
return keyVal.Value;
}
可以从像这样的设置文件中读取
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="URL" value="http://www.acme.com" />
<add key="EnableAdmin" value="False" />
</appSettings>
</configuration>
但是,我真的很喜欢由visual studio创建的新类型安全的ApplicationSettings类,而不是使用只能存储字符串的<appSettings>
。
所以我想知道的是,是否有某种方法可以覆盖Visual Studio创建的ApplicationSettings类中的一个或两个方法,以使其默认从DLL配置文件中读取?我确切地知道应该在哪个位置确定应该读取哪个配置文件。
答案 0 :(得分:1)
您可以尝试在调用应用程序中合并applicationsettings文件。这个SO线程很好地解释了它。
How to load a separate Application Settings file dynamically and merge with current settings?
如果您不想编辑调用应用程序,可以像使用一样使用Configuration类。这是另一个例子。当我需要通过COM调用WCF服务时,我已经使用了这种方法。
http://www.twisted-bits.com/2012/04/use-a-net-configuration-file-with-a-class-library-dll/
答案 1 :(得分:0)
将适用的部分复制到主站点的web.config或主可执行文件的app.config,然后ConfigurationManager.AppSettings["URL"]
工作正常。