我想在Andoni Ripoll Jarauta的回答上做一些扩展。
我们面临着类似的问题。我想从web.config文件中提取连接字符串以限制合并冲突。我还想创建一个“发布”配置,其中包含静态信息。
...很简单。创建一个自定义配置文件webdb.config,并更新web.config文件。
Ex.
web.config
<connectionStrings configSource="WebDB.config"/>
wedbdb.config(需要 XML 版本="1.0" 才能进行转换)
<?xml version="1.0" encoding="utf-8"?>
<connectionStrings>
</connectionStrings>
接下来添加用于webdb.config的转换文件
![enter image description here](https://istack.dev59.com/sQrr8.webp)
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文件,当我发布代码时,我只需要确保选择“Release”作为配置源。 在两种情况下,构建时都将使用相应的文件更新WebDB.config文件。
注意:确保将webdb.config、webdb.debug.config和webdb.release.config设置为“不复制”,以便进行“复制到输出目录”选项。