コンソールアプリケーションとapp.configファイルおよびConnections.configファイルを作成しました。 app.configファイルには、Connections.configを指すconnectionstringプロパティソースがあります
アプリケーションで接続文字列を読み取ろうとすると、ConfigurationErrorException
が表示されます。
これが私の主な方法です。
static void Main(string[] args)
{
var settings = ConfigurationManager.ConnectionStrings;
if (settings != null)
{
foreach (ConnectionStringSettings setting in settings)
{
Console.WriteLine(setting.ConnectionString);
}
}
}
App.configファイル
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings configSource="Connections.config"></connectionStrings>
</configuration>
Connections.configファイル
<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
<add name="SQLDBConnecion"
providerName="System.Data.ProviderName"
connectionString="" />
</connectionStrings>
ここで私は2つのことを観察しました。最初:configSourceを指定すると、接続文字列を読み取ることができません(例外をスローします)。
2番目:同じ接続文字列をApp.configファイルに入れて読み込もうとすると、コードは機能しますが、2つの接続文字列を取得します(空の文字列を1つだけ返すことになっています)最初の接続文字列は次のようなsqlexpress接続文字列です
data source=.\SQLEXPRESS;Integrated Security=SSPI;
AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
返される2番目の接続文字列は空の文字列です(これは予期されています)。
シナリオのように、外部ファイルから接続文字列を読み取りたい。どうやってするか?ここで何が欠けていますか?
MSDNによると :
追加の要素、セクション、または属性を含めないでください。
XMLエンコーディングを削除する必要があります。
編集
また、設定ファイルのプロパティをCopy to Output Directory = Copy if newer
またはCopy always
に設定する必要があります。
編集2
Daveが言ったことに基づいて構築するには、外部ファイルにclear
要素を追加します。最終的なConnections.config
ファイルは次のようになります。
<connectionStrings>
<clear/>
<add name="Name"
providerName="System.Data.ProviderName"
connectionString="Valid Connection String;" />
</connectionStrings>
Connections.configファイルは、xmlヘッダーなしで次のようになります。
<connectionStrings>
<add name="SQLDBConnecion"
providerName="System.Data.ProviderName"
connectionString="" />
</connectionStrings>
また、コンソールアプリケーションでファイルを正しく見つけるには、出力ディレクトリにコピーを常にコピーまたはCopy If Newer。
取得する最初の接続文字列は、machine.configから継承されます。これは、MSDNのドキュメントで説明されています。 http://msdn.Microsoft.com/en-us/library/bf7sd233(v = vs.90).aspx
構成ファイルのClearタグを使用して、継承された接続文字列を削除できます。 http://msdn.Microsoft.com/en-us/library/ayb15wz8(v = vs.90).aspx
<connectionStrings>
<clear/>
<add name="SQLDBConnecion"
providerName="System.Data.ProviderName"
connectionString="" />
</connectionStrings>
MSDNに素敵な記事があります: https://msdn.Microsoft.com/en-us/library/ms254494(v = vs.110).aspx 。
記事からの引用:
接続文字列を外部構成ファイルに保存するには、connectionStringsセクションのみを含む別のファイルを作成します。追加の要素、セクション、または属性を含めないでください。この例は、外部構成ファイルの構文を示しています。
<connectionStrings>
<add name="Name"
providerName="System.Data.ProviderName"
connectionString="Valid Connection String;" />
</connectionStrings>
これが後でこの質問に遭遇する人々に役立つことを願っています。