4

我有一个 connectionString in Web.Debug.config,另一个不同的 in Web.Release.config

当我发布我的项目时,发布的内容Web.Release.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>
4

2 回答 2

14

问题是您没有使用 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.confignameconnectionString > addxdt:TransformWeb.release/debug.config

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

有关 Web.config 转换的更多信息,请查看此 MSDN 条目

于 2013-07-12T13:13:24.740 回答
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 告诉它哪个设置属性来识别标记经过。在这种情况下,通过连接字符串名称。

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

在其他一些转换情况下,您可以使用 xdt:Transform=Insert,这意味着设置/条目不在原始 web.config 上,并且仅在部署时才会插入转换。

于 2013-07-12T13:12:24.433 回答