22

ファイルを含むexeがありApp.Configます。ここで、一部の機能を使用するために、exe の周りにラッパー dll を作成したいと考えています。

問題は、ラッパー dll から exe の app.config プロパティにアクセスするにはどうすればよいかということです。

多分私は私の質問でもう少しする必要があります.exeを含む次のapp.configコンテンツがあります:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="myKey" value="myValue"/>
  </appSettings>
</configuration>

問題は、ラッパー dll から「myValue」を取得する方法です。


あなたの解決策をありがとう。

実際、私の最初のコンセプトは、XML ファイルの読み取り方法や LINQ などを避けることでした。私の好みの解決策は、構成マネージャー ライブラリなどを使用することでした。

app.config プロパティへのアクセスに通常関連付けられているクラスを使用するヘルプをいただければ幸いです。

4

6 に答える 6

23

ConfigurationManager.OpenMappedExeConfiguration メソッドを使用すると、これを行うことができます。

MSDN ページのサンプル:

static void GetMappedExeConfigurationSections()
{
    // Get the machine.config file.
    ExeConfigurationFileMap fileMap =
        new ExeConfigurationFileMap();
    // You may want to map to your own exe.comfig file here.
    fileMap.ExeConfigFilename = 
        @"C:\test\ConfigurationManager.exe.config";
    System.Configuration.Configuration config =
        ConfigurationManager.OpenMappedExeConfiguration(fileMap, 
        ConfigurationUserLevel.None);

    // Loop to get the sections. Display basic information.
    Console.WriteLine("Name, Allow Definition");
    int i = 0;
    foreach (ConfigurationSection section in config.Sections)
    {
        Console.WriteLine(
            section.SectionInformation.Name + "\t" +
        section.SectionInformation.AllowExeDefinition);
        i += 1;

    }
    Console.WriteLine("[Total number of sections: {0}]", i);

    // Display machine.config path.
    Console.WriteLine("[File path: {0}]", config.FilePath);
}

編集:これは「myKey」値を出力するはずです:

ExeConfigurationFileMap fileMap =
    new ExeConfigurationFileMap();
fileMap.ExeConfigFilename = 
    @"C:\test\ConfigurationManager.exe.config";
System.Configuration.Configuration config =
    ConfigurationManager.OpenMappedExeConfiguration(fileMap, 
    ConfigurationUserLevel.None);
Console.WriteLine(config.AppSettings.Settings["MyKey"].Value);
于 2008-09-10T07:14:52.413 に答える
6

いくつかのテストの後、私はこれを行う方法を見つけました。

  1. App.Config ファイルをテスト プロジェクトに追加します。「リンクとして追加」オプションを使用します。
  2. System.Configuration.ConfigurationManager.AppSettings["myKey"]値にアクセスするために使用します。
于 2008-09-10T11:00:09.720 に答える
4

あなたが探しているのは次のとおりだと思います:

System.Configuration.ConfigurationManager.OpenExeConfiguration(string path)
于 2008-09-10T08:38:48.390 に答える
0

別の方法があるというギシュの指摘に同意します。EXE の共通/「パブリック」部分を DLL に抽象化して、それを実行するラッパー EXE を作成するほうがよいのではないでしょうか? これは確かに、開発のより一般的なパターンです。消費したいものだけが DLL に入り、EXE は現在行っているすべてのことから DLL に入ったものを差し引いたものを実行します。

于 2008-09-10T07:21:31.710 に答える
-1

これは xml ファイルです。Linq-XML または DOM ベースのアプローチを使用して、関連情報を解析できます。
(つまり、それが何であれ、より良い設計がないかどうか疑問に思います..あなたが達成しようとしていることです。)

于 2008-09-10T07:13:34.320 に答える
-1

IDE にリンクを追加すると、開発中にのみ役立ちます。私はlomaxxが正しい考えを持っていると思います:System.Configuration.ConfigurationManager.OpenExeConfiguration.

于 2008-09-10T11:13:10.420 に答える