使用 WebConfigurationManager 从 Web.config 文件读取 appSettings 部分
Read appSettings section from Web.config file using WebConfigurationManager
我正在使用 C# 和 .NET Framework 4.7 开发 WinForm 应用程序。
我想打开一个 Web.config 文件,读取它的 appSetting 部分并修改它。
打开它,我用这个:
System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(null);
它打开了它,但是,当我尝试通过以下方式获取密钥时:
string[] keys = config.AppSettings.Settings.AllKeys;
我得到一个空数组。
这是应用程序设置部分:
<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>
也许问题是它没有打开文件,但在 documentation 中说:
The virtual path to the configuration file. If null, the root
Web.config file is opened.
可能我不明白 root
是什么意思,因为程序和 Web.config
文件在同一个文件夹中。
我做错了什么?
OpenWebConfiguration 应该接收到您的 Web 配置的路径,如果我没记错的话并且您正在传递它 null
。
这样试试:
config = WebConfigurationManager.OpenWebConfiguration("~");
这也可能对您有所帮助:How do you modify the web.config appSettings at runtime?
WebConfigurationManager.OpenWebConfiguration
包含 path
参数的以下说明:
The virtual path to the configuration file. If null, the root Web.config file is opened.
因为您的应用程序不是 运行 在 IIS 下作为网站,打开的 Web.config
实际上是 .NET Framework 安装文件夹本身(在我的例子中,那是 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config
).
WebConfigurationManager.OpenMappedWebConfiguration
允许您将虚拟目录映射到物理目录,以便允许您指定映射到您自己的本地目录的虚拟路径。这是我用来完成这项工作的代码:
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 代替。
二、WebConfigurationManager.OpenWebConfiguration打开Web应用配置文件
关于主题,要从配置文件中获取信息,请尝试使用
var keys = ConfigurationManager.AppSettings.AllKeys
我正在使用 C# 和 .NET Framework 4.7 开发 WinForm 应用程序。
我想打开一个 Web.config 文件,读取它的 appSetting 部分并修改它。
打开它,我用这个:
System.Configuration.Configuration config = WebConfigurationManager.OpenWebConfiguration(null);
它打开了它,但是,当我尝试通过以下方式获取密钥时:
string[] keys = config.AppSettings.Settings.AllKeys;
我得到一个空数组。
这是应用程序设置部分:
<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>
也许问题是它没有打开文件,但在 documentation 中说:
The virtual path to the configuration file. If null, the root Web.config file is opened.
可能我不明白 root
是什么意思,因为程序和 Web.config
文件在同一个文件夹中。
我做错了什么?
OpenWebConfiguration 应该接收到您的 Web 配置的路径,如果我没记错的话并且您正在传递它 null
。
这样试试:
config = WebConfigurationManager.OpenWebConfiguration("~");
这也可能对您有所帮助:How do you modify the web.config appSettings at runtime?
WebConfigurationManager.OpenWebConfiguration
包含 path
参数的以下说明:
The virtual path to the configuration file. If null, the root Web.config file is opened.
因为您的应用程序不是 运行 在 IIS 下作为网站,打开的 Web.config
实际上是 .NET Framework 安装文件夹本身(在我的例子中,那是 C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\web.config
).
WebConfigurationManager.OpenMappedWebConfiguration
允许您将虚拟目录映射到物理目录,以便允许您指定映射到您自己的本地目录的虚拟路径。这是我用来完成这项工作的代码:
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 代替。 二、WebConfigurationManager.OpenWebConfiguration打开Web应用配置文件
关于主题,要从配置文件中获取信息,请尝试使用
var keys = ConfigurationManager.AppSettings.AllKeys