2013-10-28 49 views
0

我有一個網站,它的web.config中列出了一個連接字符串。連接字符串通過發佈功能進行更改,以便它可以引用開發數據庫直到它被髮布,當它引用單獨的發佈數據庫時。程序集的連接字符串

雖然網站通過一些程序集訪問數據庫。他們是班級圖書館,所以他們不能出版,至少據我所知。我讀過web.config將覆蓋app.config連接字符串,但似乎沒有發生。

每當我發佈發佈站點引用開發數據庫,​​除非我改變程序集app.config文件引用發佈數據庫。

我不想每次都記得這樣做。我該如何處理?

+0

使用的配置文件是主機進程的配置文件。因此,如果您的網站正在進行數據庫調用,那麼連接字符串應該來自Web配置。您的網站正在進行數據庫調用,還是正在調用實際進行調用的其他服務(主機進程)? –

+0

很確定這個網站。它調用一個內部的DAL類型的庫,它使用它看起來像的Settings.settings來擴展DataContext。這是問題嗎? Settings.settings不會被覆蓋? – erosebe

回答

2

你有兩個問題在這裏:

1.如何記住每次發佈正確設置你發佈:部署這樣的設置

一種方法是使用web.config文件轉換在Visual Studio中。這很容易設置,並且意味着您不必每次發佈時都記得更新設置。除了調試和發佈環境外,還可以爲「UAT」,「Staging」,「Beta」或任何其他可能需要的配置創建轉換。

您可能會發現這些文章很有用:here,herehere

例如,這裏是一個發佈環境的變換:

<?xml version="1.0"?> 
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> 
    <connectionStrings> 
     <add name="MyDB" 
     connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
     xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/> 
    </connectionStrings> 
    <system.web> 
    <compilation xdt:Transform="RemoveAttributes(debug)" /> 
     <customErrors defaultRedirect="GenericError.htm" 
     mode="RemoteOnly" xdt:Transform="Replace"> 
     <error statusCode="500" redirect="InternalError.htm"/> 
     </customErrors> 
    </system.web> 
</configuration> 

上面,你會看到,變換拍攝模式設置MYDB連接字符串的屬性(XDT:轉換=「SetAttributes」 ),從編譯部分中刪除調試屬性,並用新版本替換customErrors部分。

這是一個簡單但非常強大的技術。

2.如何讓你的組件,只需訪問在web.config拿起設置

如果你的庫已經寫在通常的方式,他們應該被檢索的連接字符串[Web] ConfigurationManager.ConnectionStrings屬性。就像@Bob Horn所說的那樣,他們應該從主機進程的配置文件(本例中是web應用的web.config)中提取設置。

但是,有時您可能會發現庫正在從項目中的.Settings文件獲取其設置,在這種情況下,事情會變得更加複雜。您需要將app.config的設置部分複製到web.config中。 (您也可以使用上述變換技術執行此操作。)

如果您有權訪問其他程序集的源代碼,請查找檢索連接字符串的代碼部分。如果它不訪問ConfigurationManager類,那麼這可能會解釋爲什麼它不拾取web.config文件。

+1

是的。謝謝。我被告知他們從app.config獲取連接字符串信息,但是當我真正在那裏挖掘時,他們從設置中獲取它。重定向,現在的事情都很好。 – erosebe

+0

很高興你把它分類。做得好。 – SimonGoldstone