如何使用物理路径打开Web配置?

aro*_*ron 35 web-config virtual-path webconfigurationmanager c#-3.0

我有一个在IIS7中创建网站的win表单.一个函数需要打开web.config文件并进行一些更新.(连接字符串,smtp,模拟)

但是我没有虚拟路径,只有物理路径.

有什么办法我还可以使用WebConfigurationManager吗?

我需要使用它来查找节和读/写的能力.

System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration
Run Code Online (Sandbox Code Playgroud)

Vad*_*bak 66

您必须将physicalPath映射到virtualPath.这是你如何做到这一点.

using System.Web.Configuration;  //Reference the System.Web DLL (project needs to be using .Net 4.0 full, not client framework)

public static Configuration OpenConfigFile(string configPath)
{
    var configFile = new FileInfo(configPath);
    var vdm = new VirtualDirectoryMapping(configFile.DirectoryName, true, configFile.Name);
    var wcfm = new WebConfigurationFileMap();
    wcfm.VirtualDirectories.Add("/", vdm);
    return WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/");
}
Run Code Online (Sandbox Code Playgroud)


Kei*_*ith 10

Vadim的答案在我们的开发服务器上运行得很好,但在我们的实时服务器上轰炸了以下消息:

System.ArgumentOutOfRangeException: Specified argument was out of the range of valid values. Parameter name: site 
Run Code Online (Sandbox Code Playgroud)

为了解决这个问题,我发现了另一个重载WebConfigurationManager.OpenMappedWebConfiguration,它将IIS网站名称作为第三个参数.结果如下:

public static Configuration OpenConfigFile(string configPath)
{
    var configFile = new FileInfo(configPath);
    var vdm = new VirtualDirectoryMapping(configFile.DirectoryName, true, configFile.Name);
    var wcfm = new WebConfigurationFileMap();
    wcfm.VirtualDirectories.Add("/", vdm);
    return WebConfigurationManager.OpenMappedWebConfiguration(wcfm, "/", "iis_website_name");
}
Run Code Online (Sandbox Code Playgroud)