外部ファイルを使用して web.config セクションの置換を行う Web 展開プロジェクトがあります。(これは、接続文字列セクションを変更するためです)。web.config セクションの置換は、手動でビルドした場合は正常に機能しますが、TFS ビルドの一部としてビルドした場合、セクションは置換されません。ビルド ログにエラーや警告が見つかりません。
考えられる原因は何ですか、またはこれを「デバッグ」するにはどうすればよいですか?
外部ファイルを使用して web.config セクションの置換を行う Web 展開プロジェクトがあります。(これは、接続文字列セクションを変更するためです)。web.config セクションの置換は、手動でビルドした場合は正常に機能しますが、TFS ビルドの一部としてビルドした場合、セクションは置換されません。ビルド ログにエラーや警告が見つかりません。
考えられる原因は何ですか、またはこれを「デバッグ」するにはどうすればよいですか?
別のファイルからセクションをプルする Web.Config の機能を使用することを検討しましたか? 次のように外部ファイルを参照します (これは、接続文字列セクションを含むファイルをロードするための私のコードです)。
<connectionStrings configSource="WebCS.config"/>
次に、接続文字列を別のファイルとしてデプロイできます。
<connectionStrings>
<add name="ConnString" connectionString="Data Source=<server>;Initial Catalog=<DB>;User ID=<ID>;Password=<pwd>" providerName="System.Data.SqlClient"/>
</connectionStrings>
そうすれば、web.config ファイルの変更についてまったく心配する必要はありません。
これがまったく役立つかどうかはわかりません....しかし、これは構成セクション全体を置き換えることなく接続文字列を追加/更新する方法です。
public static void SaveConfigVal(string connectionString, string connName)
{
System.Configuration.ExeConfigurationFileMap fileMap = new System.Configuration.ExeConfigurationFileMap();
fileMap.ExeConfigFilename = GetConfigFileName();
//System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
System.Configuration.Configuration config = System.Configuration.ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
// Retrieve the section group
ConnectionStringSettings keyValue = config.ConnectionStrings.ConnectionStrings[connName];
// If the key already exists, just replace
if (keyValue != null)
{
keyValue.ConnectionString = connectionString;
}
else
{
// Add a new key if the setting doesn't exist
config.ConnectionStrings.ConnectionStrings.Add(new ConnectionStringSettings(connName, connectionString));
}
config.Save(ConfigurationSaveMode.Modified);// (ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("ConnectionStrings");
}
private static string GetConfigFileName()
{
//return config file name....
}