读取虚拟目录中的web.config文件

时间:2009-11-02 17:32:14

标签: asp.net virtual-directory

我有一个ASP.NET应用程序(根应用程序),其虚拟目录设置为另一个ASP.NET应用程序(虚拟应用程序)。如何从Root Application的web.config文件中读取虚拟应用程序的值?我正在查看WebConfigurationManager.OpenWebConfiguration()类,但我不确定如何告诉它从根上升到一个级别。例如,我会告诉它转到〜/ web.config来获取虚拟应用程序的web.config文件,但是我需要它再增加一层到Root Application的文件结构。这甚至是正确的方法吗?

非常感谢任何帮助!!

4 个答案:

答案 0 :(得分: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 :(得分:1)

IIS确实可以以编程方式访问其配置数据(在MSDN和/或Technet上有记录)。这将是唯一受支持的路由(即将继续在IIS版本中工作)。

否则你可以破解一个解决方案(这两个方案都需要比平时更高的权利):

  • 解析appcmd.exe的输出:

    E.g。这里:

    > 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

  • 阅读配置

答案 2 :(得分:0)

我认为你会发现你想要的行为实际上是默认行为。

web.config设置级联下来。如果找不到值,您的应用将查找下一个层次结构web.config。

这可以让你在大多数情况下通过AppSettings等查找。

如果你真的需要直接访问文件而不是各种config api访问方法,我不确定会发生什么。

我现在正在使用配置了多个虚拟应用程序的IIS7进行这样的设置。

答案 3 :(得分:-1)

我再次尝试了HectorMac的建议,它仍然不适合我。因此,我将寻找替代方法将我的值存储在web.config文件中。