2013-01-19 49 views
26

我有一個ASP.NET Web應用程序項目,通過實體框架連接到遠程數據庫。在調試期間(例如在本地計算機上運行項目),數據庫的IP地址與發佈期間不同(例如,將項目上傳到我的web服務器並從瀏覽器運行)。到現在爲止,我總是手動更改Web.config文件中的數據庫連接字符串,以在兩者之間切換(基本上,我必須連接字符串,一個名爲「Debug」,一個名爲「Release」,每當我部署)。Web.config構建與版本轉換不起作用

現在我只注意到應該可以通過Web.config Transformation Syntax自動發生這種情況,您將修改的連接字符串放入Web.Release.config版本中,然後應該在釋放配置下構建DLL時使用該連接字符串。

但是它似乎並沒有爲我工作...

這是我經常Web.config文件中的相關部分(持有本地使用調試連接字符串):

<?xml version="1.0"?> 
<configuration> 

    <connectionStrings> 
    <!-- Debug connection string. Release connection string is in Web.Release.config file --> 
    <add name="DatabaseEntities" connectionString="A" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 

</configuration> 

這裏是Web.Release.config文件,其中根據本實施例應與「B」取代「DatabaseEntities」連接字符串「A」,如果DLL是下釋放模式:

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 

    <!-- Replace the DatabaseEntities connection string with the Release version (local IP address) --> 
    <connectionStrings> 
    <add name="DatabaseEntities" 
     connectionString="B" 
     xdt:Transform="Replace" xdt:Locator="Match(name)"/> 
    </connectionStrings> 

</configuration> 

(顯然「A」和「B」只是我的真實連接字符串的佔位符)

當我調試應用程序時(例如,只需按F5)使用默認的Web.config,我可以訪問數據庫。然後我通過Configuration Manager將構建配置更改爲Release。解決方案中的所有項目均設置爲「發佈」配置。然後我構建解決方案(只需通過Build或甚至通過完整的重建(例如Clean,Rebuild))。我將新建的DLL上傳到網絡服務器,以及Web.config和Web.Release.config文件,當我嘗試訪問數據庫時我無法訪問數據庫,它仍然嘗試通過調試IP地址訪問數據庫因此找不到它...

看來Web.Release.config文件被完全忽略,或者至少連接字符串沒有被替換。

我在做什麼錯?轉換語法是錯誤的嗎?我沒有正確地在發佈模式下構建應用程序嗎?

感謝您的幫助......

+0

這有時會有點棘手,如果你得到一個設置錯誤,它不會工作。如果您可以添加配置管理器的屏幕截圖,我們可能會看到您忽略的一些內容。 –

+0

這篇文章幫助了我:[http://stackoverflow.com/questions/3305096/how-can-i-use-web-debug-config-in-the-built-in-visual-studio-debugger-server] [1] [1]:http://stackoverflow.com/questions/3305096/how-can-i-use-web-debug-config-in-the-built-in-visual-studio -debugger-server –

回答

51

Then I Build the solution (just via Build or even via a complete rebuild (e.g. Clean, Rebuild)). I upload the newly built DLLs to the webserver, as well as the Web.config and Web.Release.config files

還有就是你的錯誤:Web配置變換不會對當地的環境中工作,如果你只是建立。你需要發佈。

您的部署過程看起來很奇怪:您只複製DLL,Web.config和web.Release.config。對我來說,似乎你複製你的源代碼而不是一個編譯好的應用程序。已發佈的WebApplication不包含web.release.config。

您應該將您的項目(右鍵單擊WebApplication - > Publish)發佈到本地文件系統,並從那裏複製文件,或使用您選擇的其他部署方法。

2年前,我寫了一篇關於web.config轉換的文章。它給你一步一步的教程VS 2010(在VS 2012改變發佈對話框):http://www.tomot.de/en-us/article/5/asp.net/how-to-use-web.config-transforms-to-replace-appsettings-and-connectionstrings

+16

有沒有辦法對build/F5進行轉換?這會讓生活更輕鬆。 –

+0

您可以嘗試指定Build.PublishSelection的快捷方式,以節省一些鼠標點擊。 – citronas

+1

我只是將它發佈到我的C:/ Publish文件夾,然後設置了我想用來測試發佈設置的數據庫。您可以在windows/system32/drivers/etc/hosts文件設置「127.0.0.1發佈」中設置請求,並在IIS中設置相同的應用程序(http://已發佈)。然後隨時發佈和測試。 – jwize

3

我認爲只有在發佈站點/應用程序時才進行轉換。 構建應用程序時沒有完成。後者將不斷改變源代碼管理下的web.config(這將是一個真正的麻煩)

1

如果它只是在web.config轉換過程中沒有被覆蓋的連接字符串,那麼這就是我所做的: 我清除了在「發佈網站」嚮導的「設置」部分中的「在運行時使用此連接字符串」複選框。此設置覆蓋了連接字符串的web.config轉換。