2009-05-28 98 views
0

我有一个web部署项目,使用外部文件执行web.config部分替换。 (这是为了改变连接字符串部分)。 当手动构建时,web.config部分替换工作正常,但是当作为TFS构建的一部分构建时,部分不会被替换。我在构建日志中找不到任何错误或警告。web.config文件部分替换

有什么可能的原因,或者我该如何“调试”呢?

回答

0

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

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

您如何将其与构建或Web部署集成? – simon831 2009-05-29 10:02:57

1

你有没有考虑过使用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文件。