別のアプリケーション用のプラグインを 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>
<appSettings>
ただし、文字列のみを格納できるものを使用するのではなく、Visual Studio によって作成される新しいタイプ セーフな ApplicationSettings クラスが本当に好きです。
だから私が疑問に思っているのは、Visual Studio によって作成された ApplicationSettings クラスのメソッドを 1 つまたは 2 つオーバーライドして、デフォルトで DLL 構成ファイルから読み取れるようにする方法があるかどうかということです。どの構成ファイルを読み取る必要があるかがどこで決定されているかは、私にははっきりしていません。