C#.NETで、データベースファイルがExcelワークブックのプロジェクトを行いました。接続文字列の場所がハードコードされているので、私のシステムではインストールに問題はありませんが、他のシステムでは問題があります。
アプリケーションのセットアップが完了した後に、ユーザーにパスの設定を促す方法はありますか?
私が得た答えは、"Use App.Config"でした。誰か、このApp.configとは何か、そして私の文脈でどのように使用するかを教えてくれませんか?
app.configは、簡単に言えば、多くの定義済みの設定セクションが用意されたXMLファイルで、カスタム設定セクションもサポートされています。設定セクションとは、ある種の情報を格納するためのスキーマを持つXMLの断片のことです。
設定は、connectionStrings
やappSettings
などの組み込みの構成セクションを使って構成することができます。独自のカスタム構成セクションを追加することもできます。これは高度なトピックですが、強力な型付けの構成ファイルを構築するには非常に強力です。
Webアプリケーションは一般的にweb.configを持ち、WindowsのGUI/サービスアプリケーションはapp.configファイルを持ちます。
アプリケーションレベルのコンフィグファイルは、グローバルコンフィグファイル(例:machine.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;
通常、*.configファイルを頻繁に変更することは良いことではありませんが、1回だけの設定を行いたいようですね。
https://stackoverflow.com/q/502411/453277 を参照してください。ここでは、実行時に *.config ファイルの connectionStrings
セクションを更新する方法を説明しています。
なお、理想的にはこのような設定変更はシンプルなインストーラーから行うことをお勧めします。
*Q:例えば、app.configの中の<value>
を手動で変更し、保存してから閉じたとします。このとき、binフォルダに移動して、ここから.exeファイルを起動すると、なぜ適用した変更が反映されないのでしょうか?
A:A**: アプリケーションをコンパイルすると、そのアプリケーションのapp.configがbinディレクトリ1にコピーされ、exeファイルと同じ名前になります。例えば、exeの名前が"test.exe"であれば、binディレクトリには"text.exe.config"が存在するはずです。再コンパイルせずに設定を変更することは可能ですが、オリジナルのapp.configではなく、コンパイル時に作成された設定ファイルを編集する必要があります。
1: web.configファイルは移動せず、コンパイル時とデプロイ時に同じ場所に置かれることに注意してください。例外として、web.configがtransformedの場合があります。
.NET Coreでは、新しい設定オプションが導入されました。*.configファイルの動作方法は変わっていないようですが、開発者はより柔軟な新しい設定パラダイムを自由に選択することができます。
App.Configは、アプリケーションの設定ファイルとして使用されるXMLファイルです。つまり、コードを変更せずに(再コンパイルせずに)変更したい設定をこのファイルに格納します。接続文字列の保存にもよく使われます。
その方法については、このMSDNの記事を参照してください。