我有一个Web部署项目,它使用外部文件替换web.config部分。 (这是为了改变连接字符串部分)。 web.config部分替换在手动构建时工作正常,但是当作为TFS构建的一部分构建时,该部分不会被替换。我在构建日志中找不到任何错误或警告。
可能的原因是什么,或者我如何'调试'这个?
答案 0 :(得分: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文件。
答案 1 :(得分: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....
}
答案 2 :(得分:0)
如果您正在使用或可以升级到Visual Studio 2010,则可以使用新的web.config转换根据所选配置更改web.config。