2

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

任何帮助将不胜感激!!

4

4 回答 4

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);
于 2009-11-02T17:43:16.277 回答
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

于 2009-11-02T17:43:17.587 回答
0

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

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

在大多数情况下,这将允许您通过 AppSettings 等进行查找。

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

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

于 2009-11-02T18:48:18.423 回答
-1

我再次尝试了 HectorMac 的建议,但它仍然对我不起作用。因此,我将寻找一种替代方法来将我的值存储在 web.config 文件中。

于 2009-11-16T15:13:11.347 回答