发布时,不会复制Web.Release.config中connectionStrings的内容

时间:2013-07-12 12:59:33

标签: asp.net-mvc asp.net-mvc-4 connection-string

我在Web.Debug.config中有一个connectionString,另一个在Web.Release.config中有一个不同的。

发布项目时,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>

2 个答案:

答案 0 :(得分:10)

问题是您没有使用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条目会在位于Web.config的{​​{1}}属性的原始name中找到一个条目。 connectionString > add会将属性更改为xdt:Transform中指定的属性。

但是,这在Web.config的当前状态下不起作用,因为连接字符串条目已注释掉。如果您对其进行评论,则需要将Web.release/debug.config更改为xdt:Transform

有关Web.config转换的更多信息,请查看this MSDN entry

答案 1 :(得分:3)

这是因为你没有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。

由于转换仅在DEPLOY时执行(而不是在运行应用程序时执行),这意味着您必须使用xdt:Transform,因为您仍然希望连接字符串位于原始web.config上,并且仅转换/部署时替换其属性。

在其他一些转换案例中,您可以使用xdt:Transform = Insert,这意味着原始web.config上没有设置/条目,转换只会在部署时插入。