4

アドオンを dll の形式でロードする必要があるアプリケーションがあります。dll は、構成 (app.config) ファイルから構成情報を取得する必要があります。app.config ファイルの名前を動的に調べたいのですが、これを行う方法は、私が理解しているように、AppDomain.CurrentDomain.SetupInformation.ConfigurationFile です。

ただし、親アプリケーション内でホストされているため、上記のコードから取得される構成ファイルは (parentapplication).exe.config です。親アプリケーション内に別の appdomain をロードすることはできませんが、appdomain の構成ファイルの詳細を変更したいと考えています。dll の構成ファイルを取得するには、どうすればよいですか?

4

1 に答える 1

3

わかりました、最終的に、私は自分に合ったものを一緒にハックすることができました. おそらくこれが役立つでしょう。

Assembly.GetExecutingAssembly を使用して、読み取りたい構成ファイルを含む DLL から、.CodeBase を使用して、新しい AppDomain を起動する前に DLL の場所を見つけることができます。*.dll .config は同じフォルダーにあります。

次に、URI を変換して (.CodeBase は "file://path/assembly.dll" のように見えるため)、ConfigurationManager の LocalPath を取得する必要があります (これは、Uri 形式の文字列を好みません)。

try
{
    string assemblyName = Assembly.GetExecutingAssembly().GetName().Name;
    string originalAssemblyPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase);
    Uri uri = new Uri(String.Format("{0}\\{1}.dll", originalAssemblyPath, assemblyName));
    string dllPath = uri.LocalPath;

    configuration = ConfigurationManager.OpenExeConfiguration(dllPath);
}
catch { }
于 2012-10-16T03:12:07.427 に答える