C#.NETのApp.configとは何ですか?どうやって使うのですか?


179

データベースファイルがExcelワークブックであるプロジェクトをC#.NETで実行しました。接続文字列の場所は私のコーディングでハードコーディングされているので、システムにインストールすることには問題はありませんが、他のシステムにはあります。

アプリケーションのセットアップが完了したら、ユーザーにパスを設定するように促す方法はありますか?

私が得た答えは「Use App.Config」でした...このApp.configとは何か、そして私のコンテキストでそれをどのように使用するかを誰かにここで教えてもらえますか?


回答:


190

簡単に言うと、app.configはXMLファイルであり、多くの定義済み構成セクションが利用可能で、カスタム構成セクションがサポートされています。「構成セクション」は、ある種の情報を格納するためのスキーマを含むXMLのスニペットです。

設定は、内蔵のような構成セクション使用して構成することができconnectionStrings、またはappSettings。独自のカスタム構成セクションを追加できます。これは高度なトピックですが、強く型付けされた構成ファイルを構築するのに非常に強力です。

Webアプリケーションには通常web.configがありますが、Windows GUI /サービスアプリケーションにはapp.configファイルがあります。

アプリケーションレベルの構成ファイルは、machine.configなどのグローバル構成ファイルから設定を継承します。

App.Configからの読み取り

接続文字列には、使用できる定義済みのスキーマがあります。この小さなスニペットは実際には有効なapp.config(またはweb.config)ファイルです。

<?xml version="1.0"?>
<configuration>
    <connectionStrings>   
        <add name="MyKey" 
             connectionString="Data Source=localhost;Initial Catalog=ABC;"
             providerName="System.Data.SqlClient"/>
    </connectionStrings>
</configuration>

app.configを定義したら、ConfigurationManagerクラスを使用してコードで読み取ることができます。詳細なMSDNの例に怯えないでください。それは実際には非常に簡単です。

string connectionString = ConfigurationManager.ConnectionStrings["MyKey"].ConnectionString;

App.Configへの書き込み

通常、*。configファイルを頻繁に変更することはお勧めできませんが、1回限りのセットアップだけを実行したいようです。

参照:実行時connectionStrings* .configファイルのセクションを更新する方法を説明する、接続文字列の変更と実行時のapp.configの再読み込み

このような構成変更は、単純なインストーラーから実行するのが理想的です。

実行時のApp.Configの場所

Q<value>app.configの一部を手動で変更し、保存して閉じたとします。binフォルダーに移動して.exeファイルをここから起動すると、適用された変更が反映されないのはなぜですか?

A:アプリケーションをコンパイルすると、そのapp.configがexeと一致する名前でbinディレクトリ1にコピーされます。たとえば、exeの名前が「test.exe」の場合、binディレクトリに「text.exe.config」があるはずです。再コンパイルせずに構成を変更できますが、元のapp.configではなく、コンパイル時に作成された構成ファイルを編集する必要があります。

1:web.configファイルは移動されず、コンパイル時とデプロイ時に同じ場所に留まることに注意してください。これに対する1つの例外は、web.configが変換される場合です。

.NET Core

新しい構成オプションが.NET Coreで導入されました。* .configファイルの動作方法は変更されているようには見えませんが、開発者は新しい、より柔軟な構成パラダイムを自由に選択できます。


参照:codeproject.com/Articles/16466/...設定が作業をファイルどのように偉大な概要について
BKSpurgeon

56

簡単に言うと、App.configアプリケーションレベルの構成XMLを保持するベースのファイル形式です。

例:

<?xml version="1.0"?>
<configuration>
  <appSettings>
    <add key="key" value="test" />
  </appSettings>
</configuration>

ConfigurationManager以下のコードスニペットに示すように使用して、設定にアクセスできます。

var value = System.Configuration.ConfigurationManager.AppSettings["key"];
// value is now "test"

注: ConfigurationSettingsは、構成情報を取得するための古いメソッドです。

var value = System.Configuration.ConfigurationSettings.AppSettings["key"];

21
System.Configuration.dll上記のAPIを使用するには、参照する必要があります。
KFL 2014

2
1つは、AppSettingsセクションに接続文字列を格納するのではなく、ConnectionStringsセクションに格納することです。2つについては、デザイナーを介して適切に作成すると、Visual Studioは設定に対して厳密に型指定されたプロパティを生成します(上記のコードのように)キー名を手動で入力する必要はありません。
BrainSlugs83

1
ここでは、ベストプラクティスについてではなく、OPの問題の解決策について説明します。
Furqan Safdar

2
System.Configuration.ConfigurationManager.AppSettings["Key"]すでに文字列ToString()です。それを呼び出すのは冗長です。
BogdanStăncescu2017

4

私がすべての答えから欠けていたものを追加するためだけに-あなたが知っているとすぐにそれが愚かで明白であるように見えても:

ファイルは「App.config」または「app.config」という名前にする必要があり、たとえばProgram.csと同じレベルでプロジェクトに配置できます。

他の場所が可能かどうかはわかりませんが、他の名前(ODP.netドキュメントで提案されているように、application.confなど)が機能しませんでした。

PS。私はVisual Studio Codeから始めて、「dotnet new」で新しいプロジェクトを作成しました。この場合、構成ファイルは作成されません。他の場合もあると思います。PPS。.NET COREの場合、「dotnet add package System.Configuration.ConfigurationManager --version 4.5.0」のように、構成ファイルを読み取ることができるように、nugetパッケージを追加する必要がある場合があります。


これは私が探していたものです。それをどのレベルに含めるかを知る必要がありました。一部のプログラム/フレームワークは、次のようなフォルダにあります/resources
アレックス

3

App.Configは、アプリケーションの構成ファイルとして使用されるXMLファイルです。つまり、コードを変更(および再コンパイル)せずに変更したい設定をその中に保存します。接続文字列を格納するためによく使用されます。

その方法については、このMSDNの記事を参照してください。



0

ポイントをもう1つ追加するだけ

app.configを使用して、アプリケーションアクセスを制御する方法をいくつか説明します。特定の変更をアプリケーション全体のアプリ構成ファイルに適用し、以下のような設定にアクセスできます。ConfigurationSettings.AppSettings ["Key"]

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.