我将稍微扩展一下 Andoni Ripoll Jarauta 的回答。
我们也遇到了类似的问题。我想从 web.config 文件中提取连接字符串以限制合并冲突。我还想在发布时创建一个包含静态信息的“发布”配置。
...很简单。创建自定义配置文件 webdb.config,并更新 web.config 文件。
例如。
web.config
<connectionStrings configSource="WebDB.config"/>
wedbdb.config(转换需要xml version="1.0")
<?xml version="1.0" encoding="utf-8"?>
<connectionStrings>
</connectionStrings>
接下来为 webdb.config 添加转换文件
WebDB.Debug.config 示例:
<?xml version="1.0" encoding="utf-8"?>
<connectionStrings xdt:Transform="Replace" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<add name="PRRADDataContainer" connectionString="metadata=~/PRRADData.csdl|~/PRRADData.ssdl|~/PRRADData.msl;provider=System.Data.SqlClient;provider connection string=';Data Source=localhost;Initial Catalog=;User ID=;Password=;multipleactiveresultsets=True;App=EntityFramework';" providerName="System.Data.EntityClient" />
<add name="MyConnectionString" connectionString="Data Source=localhost;Initial Catalog=;Persist Security Info=True;User ID=;Password=;" providerName="System.Data.SqlClient" />
</connectionStrings>
WebDB.Release.config 示例:
<?xml version="1.0" encoding="utf-8"?>
<connectionStrings xdt:Transform="Replace" xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<add name="PRRADDataContainer" connectionString="metadata=~/PRRADData.csdl|~/PRRADData.ssdl|~/PRRADData.msl;provider=System.Data.SqlClient;provider connection string=';Data Source=prod_server;Initial Catalog=;User ID=;Password=;multipleactiveresultsets=True;App=EntityFramework';" providerName="System.Data.EntityClient" />
<add name="MyConnectionString" connectionString="Data Source=prod_server;Initial Catalog=;Persist Security Info=True;User ID=;Password=;" providerName="System.Data.SqlClient" />
</connectionStrings>
接下来我们需要添加一个构建后事件。这是通过简单地编辑 CSPROJ 文件来创建的。
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterBuild">
<TransformXml Source="WebDB.config" Transform="WebDB.$(Configuration).config" Destination="WebDB.config" />
</Target>
现在,当我在本地运行时,我将获得 WebDB.Debug.config,当我发布我的代码时,我只需要确保选择“发布”作为配置源。在这两种情况下,WebDB.config 文件都会在您构建时使用相应的文件进行更新。
注意:确保将“复制到输出目录”选项的 webdb.config、webdb.debug.config 和 webdb.release.config 设置为“不复制”。
希望这会有所帮助!