33

当我使用 Web 应用程序时,下面的代码行

Configuration objConfig = 
    ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.None);

在类库中出现此错误:

“不在独立 exe 中运行时,必须指定 exePath。”

以前使用的是控制台应用程序,代码可以访问app.config. 我尝试使用System.Web.Configuration类库,但 .Net 选项卡中不存在“添加引用”的 dll。

请帮助:)

4

3 回答 3

50

You need to use a different configuration manager in a web context. The following code block shows an example of how to deal with this:

System.Configuration.Configuration configuration = null;         
if (System.Web.HttpContext.Current != null)
{
   configuration =
       System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
}
else
{
  configuration =
      ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
}
于 2013-11-19T17:23:15.720 回答
2

我不确定你在做什么;但乍一看,您似乎正在尝试在 Web 环境中使用为 WinForms 应用程序编写的代码。这几乎肯定是行不通的,因为您的网络应用程序没有您需要的权限。
尝试查找如何在 Web 环境中执行此操作(因为您似乎正在处理配置文件,请尝试在 WEB.CONFIG 上搜索以开始)

于 2013-05-23T18:02:22.597 回答
1

我尝试使用@shane 的答案,但最终使用 Hangfire 遇到了同样的异常。这段代码对我有用:

System.Configuration.Configuration configFile = null;
if (System.Web.HttpContext.Current != null)
{
    configFile =
        System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
}
else
{
    System.Configuration.ExeConfigurationFileMap map = new ExeConfigurationFileMap { ExeConfigFilename = $"{System.AppDomain.CurrentDomain.BaseDirectory}Web.Config" };
    configFile = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None);
}

请注意,编辑 Web.config 将导致应用程序池重新启动

于 2018-07-16T16:04:48.273 回答