如何在Web上下文中替换OpenExeConfiguration(asp.net mvc 1)

时间:2011-04-12 00:52:37

标签: asp.net asp.net-mvc c#-3.0

好的,所以我们当前正在使用OpenExeConfiguration来读取配置文件,但是在Web环境中运行时这不起作用。

我已尝试过各种不同的方式以编程方式打开web.config,但我似乎无法让它读取正确的web.config文件。如果重要,我目前正在VS 2008中进行调试。

1. config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(System.Web.HttpContext.Current.Request.ApplicationPath);

2. config = ConfigurationManager.OpenMappedExeConfiguration(new ExeConfigurationFileMap { ExeConfigFilename = "web.config" }, ConfigurationUserLevel.None);

3. config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");

4. config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(null);

5.  System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration(System.Web.Hosting.HostingEnvironment.ApplicationVirtualPath);

它会打开错误的配置文件(机器配置或VS /IDE / Web.config)或抱怨错误:

{System.Configuration.ConfigurationErrorsException:加载配置文件时出错:无法映射路径'/'。 ---> System.InvalidOperationException:无法映射路径'/'。

修改 好的,所以

的组合
config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");

以管理员身份运行Visual Studio 2008。我们希望在部署到我们的Web服务器/客户端环境时不会遇到安全/权限问题!

1 个答案:

答案 0 :(得分:28)

所以最后我使用了这段代码(必须处理Web应用程序是否正在运行,或者我们的单元测试代码是否正在运行)。

System.Configuration.Configuration config = null;
                    if (System.Web.HttpContext.Current != null && !System.Web.HttpContext.Current.Request.PhysicalPath.Equals(string.Empty))
                        config = System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
                    else
                        config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

还必须以管理员模式运行Visual Studio - 我发现您可以在快捷方式中设置为属性,因此您无需记住每次在Windows 7中右键单击并以管理员身份运行:) / p>