2013-07-12 73 views
3

我有一個連接字符串Web.Debug.config,另一個不同,在Web.Release.config當我發佈時,不會複製Web.Release.config中的connectionStrings的內容

當我發佈我的項目時,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> 
+0

你在調試模式下發布? – hoang

+0

@hoang:nope,它被配置爲Release。 – Fabricio

+0

也許你應該顯示你的web.release.config的內容和你的web.config的相應部分 – Jan

回答

9

問題是您沒有使用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條目將找到的name屬性在原始Web.config一個條目,位於connectionString > addxdt:Transform會將屬性更改爲您的Web.release/debug.config中指定的屬性。

但是,這不會在Web.config的當前狀態下工作,因爲連接字符串條目被註釋掉了。如果您留下評論,則需要將xdt:Transform更改爲Insert

有關的Web.config變換的更多信息,看this MSDN entry

+0

(1)我需要把它放在debug/release.config中? (2)所以如果我取消註釋默認connectionString我不需要做'插入'? – Fabricio

+0

@Fabricio好吧,如果你的連接字符串不同,那麼是的。如果您取消註釋您的'Web.config'條目,那麼如果您需要更改它,則調試和發佈條目都需要兩個'xdt:..'。 –

+0

如果我使用'SetAttributes',則「DefaultConnection」不會被「MyContext」替代。插入它雖然插入。 – Fabricio

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只執行:變換,因爲你還想把連接字符串到那裏原來web.config中,只有在部署時轉換/替換其屬性。

在其他一些轉換情況下,您可以使用xdt:Transform = Insert,這意味着設置/條目不在原始web.config上,轉換隻會在部署時插入。

+0

你是什麼意思?你可以表演嗎?我還不知道這些細節。 – Fabricio

+1

正如Simon指出的那樣,您需要取消原始web.config上的連接字符串的註釋,因爲即使這隻在您部署時纔會起作用,但如果您在本地調試/運行應用程序,它將不起作用。 – GR7

+1

我編輯了答案,詳細解釋了Fabricio。希望能幫助到你。 – GR7

相關問題