C# 使用WebConfiguration Manager从Web.config文件中读取appSettings部分

C# 使用WebConfiguration Manager从Web.config文件中读取appSettings部分,c#,appsettings,configurationmanager,webconfigurationmanager,C#,Appsettings,Configurationmanager,Webconfigurationmanager,我正在用C#和.NET Framework 4.7开发一个WinForm应用程序 我想打开一个Web.config文件,读取它的appSetting部分并修改它 要打开它,我使用以下命令: System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(null); 它会打开它,但当我尝试使用以下工具获取钥匙时: string[] keys = config.AppSetting

我正在用C#和.NET Framework 4.7开发一个WinForm应用程序

我想打开一个Web.config文件,读取它的appSetting部分并修改它

要打开它,我使用以下命令:

 System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(null);
它会打开它,但当我尝试使用以下工具获取钥匙时:

string[] keys = config.AppSettings.Settings.AllKeys;
我得到一个空数组

这是appSetting部分:

<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
    </sectionGroup>
  </configSections>
  <connectionStrings>

  </connectionStrings>
  <appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

    <add key="MinRemainingCodes" value="100" />
    <!-- Others keys -->
  </appSettings>

</configuration>

说:

配置文件的虚拟路径。如果为null,则为根 Web.config文件已打开

也许我不明白root的意思,因为程序和Web.config文件在同一个文件夹中


我做错了什么?

如果我没有弄错,并且您正在将其传递给
null
,则OpenWebConfiguration应该会接收到您的web配置的路径

试着这样做:

config = WebConfigurationManager.OpenWebConfiguration("~");
这也可能对您有所帮助:

包括对
路径
参数的以下描述:

配置文件的虚拟路径。如果为null,则打开根Web.config文件

因为您的应用程序不是作为网站在IIS下运行的,所以打开的
Web.config
实际上是位于.NET Framework安装文件夹中的内容(在我的例子中,就是
C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\Web.config

允许您将虚拟目录映射到物理目录,以便指定映射到您自己的本地目录的虚拟路径。以下是我用来实现此功能的代码:

var webConfigurationFileMap = new WebConfigurationFileMap();

webConfigurationFileMap.VirtualDirectories.Add(
    string.Empty,
    new VirtualDirectoryMapping(Directory.GetCurrentDirectory(), isAppRoot: true));

var webConfig = WebConfigurationManager.OpenMappedWebConfiguration(
    webConfigurationFileMap,
    string.Empty);

正如您所看到的,我正在将根虚拟目录(使用
string.Empty
)映射到应用程序的目录(使用
directory.GetCurrentDirectory
)。

首先,您使用web.config作为桌面应用程序。听起来不对。尝试改用app.config。 其次,WebConfiguration Manager.OpenWebConfiguration打开Web应用程序配置文件

至于主题,要从配置文件中获取信息,请尝试使用

var keys = ConfigurationManager.AppSettings.AllKeys

下面的例子对您有用吗?请尝试
string[]keys=ConfigurationManager.AppSettings.AllKeys?
@danielshillock谢谢,但它不起作用。我已经更新了我的问题的更多细节。谢谢,但我得到以下例外:“这里不允许应用程序的虚拟相对路径“~”。您是否尝试读取特定值?以确保您能够使用null实际打开web配置。类似于:config.AppSettings.Settings.Item(“myKey”).Value=txtmyKey.Text。如果可以,那么尝试“Request.ApplicationPath”而不是“~”或者nullI正在开发WinForm应用程序。我将从该应用程序打开它,而不是从ASP.NET应用程序打开它。