我在Web.Debug.config
中有一个connectionString,在Web.Release.config
中有另一个不同的connectionString。
当我发布我的项目时,Web.Release.config
的内容不会出现在发布的Web.config
中。为什么?
Web.config
<configuration>
<connectionStrings>
<!-- <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)v11.0;Initial Catalog=aspnet-SalvaVidas-20130610104655;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnet-SalvaVidas-20130610104655.mdf" /> -->
</connectionStrings>
Web.Debug.config
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="MyContext"
providerName="System.Data.SqlClient"
connectionString="Data Source=(LocalDb)v11.0;Initial Catalog=MyDb;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|MyDb.mdf" />
</connectionStrings>
Web.Release.config
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="MyContext"
providerName="System.Data.SqlClient"
connectionString="Data Source=.SQLEXPRESS;Initial Catalog=MyDb;Server=ServerName;Database=MyDb;Trusted_Connection=True;Integrated Security=SSPI;" />
</connectionStrings>
问题是您没有使用Web.debug.config/Web.release.config作为转换。
你需要做:
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="MyContext"
connectionString="Data Source=.SQLEXPRESS;Initial Catalog=SalvaVidas;Server=ServerName;Database=MyDb;Trusted_Connection=True;Integrated Security=SSPI;"
xdt:Transform="SetAttributes"
xdt:Locator="Match(name)"/>
</connectionStrings>
xdt:Locator
条目将通过位于connectionString > add
中的name
属性在原始Web.config
中找到一个条目。xdt:Transform
会将属性更改为Web.release/debug.config
中指定的属性。
但是,在Web.config的当前状态下,这将不起作用,因为连接字符串条目已被注释掉。如果您对其进行了注释,则需要将xdt:Transform
更改为Insert
。
有关Web.config转换的更多信息,请查看MSDN条目
这是因为您没有xdt:Transform属性。
您有几个选项,但在这种情况下,您很可能必须在Web.Debug.config和Web.Release.config中使用以下内容:
<connectionStrings>
<add name="MyContext"
providerName="System.Data.SqlClient"
connectionString="Data Source=(LocalDb)v11.0;Initial Catalog=MyDb;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|MyDb.mdf" xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
xdt:Transform属性告诉它标记已经存在于原始Web.config文件中,它只需要用您提供的属性替换所有属性,而xdt:Locator则告诉它通过哪个设置属性来标识标记。在这种情况下,通过连接字符串Name。
由于转换仅在部署时执行(而不是在运行应用程序时执行),这意味着您必须使用xdt:Transform,因为您仍然希望连接字符串位于原始web.config上,并且在部署时仅转换/替换其属性。
在其他一些转换情况下,可以使用xdt:Transform=Insert,这意味着设置/条目不在原始web.config上,并且转换将仅在部署时插入它。