2009-11-02 74 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