2009-06-16 70 views
5

使用虛擬目錄和/或虛擬應用程序建立共享相同的應用程序代碼(aspx頁面等),但有不同的web兩個網站是否有可能.config文件?網站和代碼駐留在同一個IIS上運行的同一臺服務器上。兩個ASP.NET網站共享應用程序文件,但具有不同的web.config

我正在使用IIS 6.

+1

兩者有什麼.config文件之間的區別?也許只是與認證和授權有關?通常可以找到其他方法來處理這些問題(例如,在Internet站點和管理它的Intranet站點之間共享)。 – 2009-06-16 13:07:52

+0

唯一的區別是一些appSettings。我只是好奇地想知道,如果我能在不更改任何代碼的情況下做到這一點。 – 2009-06-16 13:11:28

+0

@ Jakob-你可以通過在前面某種特定應用的關鍵與應用的設置做到這一點,但仍然需要更改代碼。 – RichardOD 2009-06-16 13:17:38

回答

5

如果你想保持代碼在一個地方,簡短的答案是否定的。可能最好的解決方案是讓應用程序根據您確定的網站加載自定義配置文件(可能是主機頭?)。

喜歡的東西ConfigurationManager.OpenExeConfiguration可能是有用的。

我想一個替代方案是想出一個配置約定,其中包含一個文件中的所有內容,並使用GetSection(具有某種特定於應用的前綴)來獲得所需的特定設置。

0

應該是,虛擬應用程序中的web.config將被使用。如果佈局是分層的,你可能需要尋找web.config繼承

+0

我要補充,你需要在應用程序代碼的2個物理副本作爲一個web.config將在每個 – Pharabus 2009-06-16 13:05:56

1

這簡直是不可能的。

爲什麼???

因爲asp.net工作進程將從應用程序實際駐留的物理文件夾中讀取默認配置文件。虛擬目錄與web.config無關。它只是被web服務器(IIS)用來映射到特定的物理目錄作爲網站的根目錄。

謝謝。

0

我假設你有應用程序A,應用程序B,應用程序C等等,它們都完全一樣,除了它們在web.config文件中定義的某些配置屬性不同之外。

當然這是可能的 - 最簡單的方法是將項目設置爲Web應用程序,然後編譯,然後在應用程序中共享該DLL。你可以使用GAC。

您可以在IIS中設置單個站點,指向所有邏輯所在的共享目錄(或使用每個虛擬目錄),但不能共享app_code文件夾。

編輯

RichardOD有最好的答案上面,我之前已經實施了類似的東西。基本上,我設置了一個由web.config引用的自定義配置文件(以防止應用程序在我對其進行更改時重新啓動)。這個文件是通過主機名讀取的,並且包含每個主機的特定屬性。

我只要將主機標頭添加到IIS中,並在自定義配置文件中爲該主機添加一個條目。完成。

1

我敢肯定,我這樣做一次,幾年前爲了有一個網站的每個實例不同的數據庫連接字符串。我的猜測是,有針對包含一個web.config用實例特定的設置中,然後裏面每一個虛擬目錄是一個應用程序,它引用的源代碼的網站的每個實例的虛擬目錄(其中包括共享web.config中)。

這樣的伎倆,如果我沒有記錯,當時,對於一個給定的網站,有隻包含一個web.config一個虛擬目錄。這些值將被該虛擬目錄的子應用程序繼承。

相關問題