可変設定ConnectionStrings行?
-
21-08-2019 - |
質問
ことは可能ですconnectionstrings定義されたアプリです。config/web.config行?使いたいの異なるconfigfilesによって機械のアプリ/サイトでのみデバッグ目的のコースです。に使用しますが、通常の設定ファイルが展開).
できる書AppSettingsなConnectionStrings(AFAIK).はできますか?
解決
はい、それは可能ですが、私の知る限り反射のみを経由して。次のコードは、あなたが(使用については、以下を読んで)必要なものを行う必要があります:
public static string SetConnectionString(Type assemblyMember,
Type settingsClass,
string newConnectionString,
string connectionStringKey)
{
Type typSettings = Type.GetType(Assembly.CreateQualifiedName(assemblyMember.Assembly.FullName, settingsClass.FullName));
if (typSettings == null)
{
return null;
}
PropertyInfo prpDefault = typSettings.GetProperty("Default", BindingFlags.Static | BindingFlags.Public);
if (prpDefault == null)
{
return null;
}
object objSettings = prpDefault.GetValue(null, null);
if (objSettings == null)
{
return null;
}
// the default property, this[], is actually named Item
PropertyInfo prpItem = objSettings.GetType().GetProperty("Item", BindingFlags.Instance | BindingFlags.Public);
if (prpItem == null)
{
return null;
}
object[] indexerName = { connectionStringKey };
string oldConnectionString = (string)prpItem.GetValue(objSettings, indexerName);
prpItem.SetValue(objSettings, newConnectionString, indexerName);
return oldConnectionString;
}
assemblyMember
は、呼び出し元のタイプである
settingsClass
は、設定クラスのタイプです
newConnectionString
は
を設定するための完全な文字列であります
connectionStringKey
は、あなたのアプリの設定で定義された接続文字列の名前です。
あなたはできるだけ早く、このメソッドを呼び出す必要があります。
他のヒント
私は目的をデバッグするために一度私のプロジェクトでこれを試みたが、それを行うことができませんでした、問題は(私が推測する、私が間違っているなら、私を修正)アプリ上でのapp.configを起動し、メモリへの変更をロードしますアプリが実行されている間のapp.configは反映されません。
ここではこれを克服するために私がやったことだ、あなたのプログラムは次のように動作しているときに、あなたが欲しいものを呼び出してはapp.config内のすべてのconnectionStringsを定義します。
たとえば次のようにapp.configをであなたのconnectionStringsを定義したと仮定することができます。
<connectionStrings>
<add name="YourNameSpace.Properties.Settings.ConnectionString_1"
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=|DataDirectory|\file.mdb"
providerName="System.Data.OleDb"/>
<add name="YourNameSpace.Properties.Settings.ConnectionString_2"
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data
Source=|DataDirectory|\file.mdb"
providerName="System.Data.OleDb"/>
</connectionStrings>
あなたは(あなたが右:-)をデバッグする)必要な数の定義
:その後のコードでこれらの接続設定を呼び出すために、このような何かを行いますYourNameSpace.Properties.Settings FOO =新しいYourNameSapce.Properties.Settings();
foo.ConnectionString_1;
HTH
敬具
@nand
P.S:この応答は、C#に固有の
。あなたは本当に実行中のプロセスの設定ファイルを編集することはできません。
(長所と短所を持つ)一つのオプションはのmachine.configまたはマスターweb.configファイル内の設定データを使用することです(「サイト」のために、あなたは「場所」ノードを使用) - ではないに突入するためのオプションは、しかします。
これを処理するためのより良い方法は、理想的には自動化され、ビルド/展開プロセスの一部として、設定ファイルを交換することです。そうすれば、すべてが自己完結型で、あなたはバニラサーバに「robocopyを」することができますし、それが動作しています。
<時間>あなたの「開発者ごとの」ポイントの再;私はこれを行う最も簡単な方法は、設定を標準化し、機械を微調整することがわかりました。例えば、我々はVM上のローカルWebサーバを実行します。むしろ、各マシンに対するコードよりも、我々は(「localhost」をミラーに)「のLocalServer」を標準化し、開発者がコントロールできることを各マシンにローカルのDNSレコードを追加します。これは、それが時間の経過とともに変化する防ぐために、固定IPアドレス(または多分DHCP予約を)必要なことに注意してください!
同上データベース。ローカルサーバは、使用することができます「」;リモートサーバーがマシンにエイリアス、ユーザが望んでいるものは何でも「devserver」ポイントすることができます。
ただ、思考...
で走りきることができxmlpokeにNAntスクリプトが設置してます。
E.g.
- ロケーションとクラシックNAntのです。
- を作成します。batるNAntるをインストールのサイトはxmlpokeを修正します。configの設定に基づき、サーバの名称又はその他のパラメータとします。