2009-11-02 76 views
2

我有一個ASP.NET應用程序(根應用程序),它具有設置爲另一個ASP.NET應用程序(虛擬應用程序)的虛擬目錄。如何從根應用程序的web.config文件中創建虛擬應用程序讀取值?我正在查看WebConfigurationManager.OpenWebConfiguration()類,但我不確定如何告訴它從根上升一級。例如,我會告訴它去〜/ web.config來獲取虛擬應用程序的web.config文件,但我需要它將根級應用程序的文件結構再提升一級。這甚至是正確的方法嗎?閱讀虛擬目錄中的web.config文件

任何幫助將不勝感激!

回答

-1

我再次嘗試了HectorMac的建議,但它仍然不適用於我。因此,我將尋求替代方法來將我的值存儲在web.config文件中。

2

可以使用ExeConfigurationFileMap類ConfigurationManager中,如:

string configFile = new FileInfo(Server.MapPath("/Web.config")).Directory.Parent.FullName + "\\Web.config"; 

ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap(); 

fileMap.ExeConfigFilename = configFile; 

Configuration config = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None); 

Response.Write(config.AppSettings.Settings["Test"].Value); 
1

IIS確實有其配置數據編程訪問(其上MSDN和/或記錄的Technet)。這將是唯一受支持的路線(即將繼續在IIS版本中運行)。

否則,您可以破解的解決方案(這兩個都需要比對過程中常用的權利更高):

  • appcmd.exe解析輸出:

    例如在這裏:

    > C:\Windows\system32\inetsrv\appcmd.exe list vdir 
    VDIR "Default Web Site/" (physicalPath:E:\Dev\weblocal\XYZ) 
    VDIR "Default Web Site/DevRoot/TestWebClient" (physicalPath:E:\Dev\Tests\ClientSideWeb) 
    VDIR "Default Web Site/Home" (physicalPath:E:\Data\Homepages) 
    
  • 直接從C:\Windows\System32\inetsrv\config讀取配置。

0

我想你會發現你所希望的行爲實際上是默認行爲。

web.config設置級聯關閉。如果找不到該值,您的應用程序將查找下一個分層web.config。

這將允許你通過AppSettings等查找大多數情況下。

我不確定如果您真的需要直接訪問文件而不是各種配置api訪問方法會發生什麼情況。

我有一個這樣的設置,現在使用配置了多個虛擬應用程序的IIS7。

+0

有趣。我在我的虛擬目錄應用程序和我的根目錄應用程序中設置了相同的配置值。當我從虛擬目錄應用程序中刪除這個值時,我希望它從根目錄應用程序讀取數據,但是我得到了一個錯誤。 – 2009-11-02 19:02:48

+0

我有一套應用程序可以在沒有任何特殊配置的情況下從主機應用程序中找到AppSettings值。所有的虛擬應用程序都是在IIS7中配置的。值僅存在於託管web.config。 – HectorMac 2009-11-02 19:23:48

+0

有趣。我不知道我做錯了什麼。您的虛擬應用程序是否設置爲IIS中的應用程序? – 2009-11-02 19:42:17