Msbuild web.config文件节替换

Msbuild web.config文件节替换,msbuild,web-deployment-project,Msbuild,Web Deployment Project,我有一个web部署项目,它使用外部文件替换web.config节。(这是为了更改“连接字符串”部分)。 手动生成web.config节替换可以正常工作,但作为TFS生成的一部分生成时,不会替换该节。我在生成日志中找不到任何错误或警告 可能的原因是什么,或者我如何“调试”它?我不确定这是否会有帮助……但这是一种添加/更新连接字符串而不必替换整个配置部分的方法 public static void SaveConfigVal(string connectionString, string con

我有一个web部署项目,它使用外部文件替换web.config节。(这是为了更改“连接字符串”部分)。 手动生成web.config节替换可以正常工作,但作为TFS生成的一部分生成时,不会替换该节。我在生成日志中找不到任何错误或警告


可能的原因是什么,或者我如何“调试”它?

我不确定这是否会有帮助……但这是一种添加/更新连接字符串而不必替换整个配置部分的方法

  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....
        }

您是否考虑过使用Web.Config的功能从单独的文件中提取节?您可以这样引用外部文件(这是我加载包含“我的连接字符串”部分的文件的代码):


然后可以将连接字符串部署为单独的文件:

 <connectionStrings>
       <add name="ConnString" connectionString="Data Source=<server>;Initial Catalog=<DB>;User ID=<ID>;Password=<pwd>" providerName="System.Data.SqlClient"/>
 </connectionStrings>


这样,您根本不必担心更改web.config文件。

如果您正在使用或可以升级到Visual Studio 2010,则可以利用新的web.config转换根据所选配置更改web.config


您如何将其与构建或web部署集成?
 <connectionStrings>
       <add name="ConnString" connectionString="Data Source=<server>;Initial Catalog=<DB>;User ID=<ID>;Password=<pwd>" providerName="System.Data.SqlClient"/>
 </connectionStrings>