您当前的位置: 首页 >  .net

寒冰屋

暂无认证

  • 0浏览

    0关注

    2286博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

.NET配置文件的原因、位置和方式

寒冰屋 发布时间:2021-06-15 22:24:58 ,浏览量:0

目录

介绍

为什么

位置

机器配置

应用配置

用户设置

其他配置

方式

应用设置部分

connectionStrings部分

applicationSettings和userSettings部分

升级设置

接下来是什么

进一步阅读

更新:本文中的大部分信息现已过时。首选的配置机制现在位于Microsoft.Extensions.Configuration NuGet 包和相关包中。有关更多详细信息,请参阅此链接中的ConfigurationBuilder类文档。

介绍

我已经使用.NET配置文件很多年了。我认为如果我向他们提供一个快速的介绍,可能对其他人有帮助。

在本文档中,许多C#代码示例都假设您在项目中包含了对System.Configuration.dll的引用,并且您在代码中包含了以下using语句:

using System.Configuration;

 

这两个都是访问ConfigurationManager类所必需的,这是访问配置信息的一种方法。

为什么

.NET Framework 提供了一组丰富的类和技术来简化应用程序配置。本质上,所有这些类都使从XML配置文件读取和写入配置信息变得容易。

配置文件包括许多标准部分,一些用于常见.NET功能的自定义部分,还允许开发人员创建自己的自定义配置部分。

标准部分随着时间的推移而发展。最初,标准配置主要通过appSettings包含每个设置的名称/值对的部分完成。随着时间的推移,透明的,类型安全的支持通过生成的C#Settings类及相应的applicationSettings与userSettings配置部分提供。

位置

我在哪里可以找到配置文件?这是一个看似复杂的问题。由于配置是分层的,实际上有多个配置文件可能会影响一个应用程序。其中包括机器配置文件、应用程序(或 Web)配置文件、用户本地设置文件和用户漫游设置文件。

机器配置

机器配置文件与不太容易找到的.NET Framework文件一起存在。配置文件的位置取决于应用程序使用的.NET版本和平台类型(例如64位)。

一个典型的例子可能是C:\Windows\Microsoft.NET\Framework\v4.0.30319\CONFIG\machine.config。

在您的C#应用程序代码中,以下内容将返回文件的位置:

System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() 
               + @"CONFIG\machine.config"

 

应用配置

应用程序配置文件通常与您的应用程序位于同一目录中。对于Web应用程序,它被命名为Web.config。对于非Web应用程序,它以App.config的名称开始。在构建之后,它被复制到与您的.exe文件相同的名称。因此,对于程序MyProgram.exe,您可能希望在同一目录中找到MyProgram.exe.config。

在您的C#应用程序代码中,以下内容将返回文件的位置:

AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

 

虽然通常不建议这样做,但您可能会发现某些应用程序更改了应用程序配置文件的位置,如下所示:

AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", "NewName.config")

 

用户设置

用户设置几乎不可能找到,也许是故意的。目录的名称因Windows版本而异。更复杂的是,父文件夹通常是隐藏的。文件夹结构还包含公司名称(应用程序供应商的)、应用程序名称、应用程序的唯一标识和应用程序版本。

例如,在Windows 7上,本地用户设置可能如下所示:

C:\Users\MyUsername\AppData\Local\CompanyName\MyProgram.exe_Url_pnbmzrpiumd43n0cw05z2h4o23fdxzkn\1.0.0.0\user.config

在C#中,您可以获取本地用户设置(第一行)或漫游用户设置(第二行)的基目录,如下所示:

Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

 

在C#中(参见概述中的注释),您可以获得本地用户设置(第一行)或漫游用户设置(第二行)的确切文件路径,如下所示:

ConfigurationManager.OpenExeConfiguration
                     (ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoaming).FilePath

 

其他配置

如果这还不够令人困惑,您应该了解一些其他文件。有一个根Web.config(位于与machine.config相同的目录中)。此外,Web应用程序的子目录可以通过特定于该子目录的Web.config提供对继承设置的额外覆盖。

最后,IIS提供了一些它自己的配置。一个典型的位置是:C:\Windows\System32\inetsrv\ApplicationHost.config。

方式

如前所述,应用程序配置文件被分成许多相当标准的配置部分。在这里,我们简要讨论一些最常见的部分。

应用设置部分

最简单的标准配置部分是appSettings,它包含每个设置的名称/值对集合:



  
    
  

 

在C#中(请参阅概述中的注释),您可以按如下方式引用设置的值:

string mySetting = ConfigurationManager.AppSettings["MySetting"];

 

connectionStrings部分

由于数据库连接在.NET中非常常见,因此为数据库连接字符串提供了一个特殊部分。该部分称为connectionStrings:



  
    
  

 

在C#中,您可以按如下方式获取连接字符串:

string connectionString = ConfigurationManager.ConnectionStrings[
  "MyConnectionStringName"].ConnectionString;

 

最初,人们可能想知道是否需要引用 “连接字符串”的ConnectionString属性。事实上,该connectionStrings部分的名称很糟糕。更好的名称可能是connectionStringSettings,因为每个条目都包含一个连接字符串和一个数据库提供程序。

连接字符串的语法完全由数据库提供者决定。在这种情况下,System.Data.SqlClient是Microsoft SQL Server数据库最常见的数据库提供程序。

applicationSettings和userSettings部分

在.NET 2.0中,Microsoft 试图使配置文件的使用变得更加容易。他们引入了一个设置文件。细心的观察者会注意到“设置”在应用程序配置文件中开始它们的生命,然后被复制到用户设置配置文件中。

对于Windows窗体和WPF应用程序,您将在项目的Properties文件夹中找到一个文件Settings.settings。对于控制台应用程序和其他应用程序,您还可以利用设置。打开项目的属性,然后单击设置按钮/选项卡。您将获得添加默认设置文件的选项。

通常,您编辑此设置文件(或项目的设置)而不是直接编辑配置文件。下面的示例仅用于演示这些设置确实存在于配置文件中。



  
    
      
    
    
      
    
  
  
    
      
        MyUserSettingValue
      
    
  
  
    
      
        MyApplicationSettingValue
      
    
  

 

要引用其中一项设置,您只需使用自动为您创建的Settings类。一个典型的参考,可能如下所示:

string myUserSetting = Properties.Settings.Default.MyUserSetting;
string myApplicationSetting = Properties.Settings.Default.MyApplicationSetting;

 

注意:Properties是在应用程序的命名空间中自动创建的命名空间。

要更改用户的设置,您只需为属性分配一个值并保存更改,如下所示:

Properties.Settings.Default.MyUserSetting = newValueForMyUserSetting;
Properties.Settings.Default.Save();

 

升级设置

最终,您将希望发布应用程序的新版本。在这里,您可能会遇到一个常见问题。由于用户设置是特定于版本的,它们将在升级后丢失。

值得庆幸的是,该框架预见到了这一需求并提供了Upgrade方法。处理此问题的典型方法是包含一个布尔Upgraded用户设置,初始值为false(首次部署应用程序时)。

因此,处理升级(并保留以前的用户设置)的典型代码如下所示:

if (!Properties.Settings.Default.Upgraded)
{
  Properties.Settings.Default.Upgrade();
  Properties.Settings.Default.Upgraded = true;
  Properties.Settings.Default.Save();
}

 

接下来是什么

在上一节中,您可能已经注意到configSections配置文件中相当冗长的部分。这是微软如何扩展配置文件来添加新的userSettings和applicationSettings章节。

这也是您可以添加自己的自定义配置部分的方式。

简而言之,您可以通过扩展ConfigurationSection和ConfigurationElement类来做到这一点。在您的每个派生类中,您将使用ConfigurationPropertyAttribute.

简单吧?只是在开玩笑。其他人对这个稍微复杂但不太困难的机制提供了很好的描述。我在本文档的末尾提供了链接以供进一步阅读。

在这里,我只想提供一些提示,这些提示可能会在较长的描述中丢失。

全部完成后,您需要创建一个XML架构文档(XSD文件),用于描述您的部分,并将其包含在您的项目中。打开配置文件后,您可以使用XML...Schemas菜单项来确保智能感知找到您的XSD文件。

根据您的Visual Studio版本,您可能会听到有关xmlns配置部分中的属性的一些抱怨。如果你这样做,有一个简单的解决方案。我通常从我自己的中间类XmlnsConfigurationSection派生,而不是直接派生自ConfigurationSection. 它使问题消失!

using System.Configuration;

namespace Extras.Configuration
{
  abstract public class XmlnsConfigurationSection : ConfigurationSection
  {
    [ConfigurationProperty("xmlns")]
    public string Xmlns
    {
      get { return (string)this["xmlns"]; }
      set { this["xmlns"] = value; }
    }
  }
}

 

进一步阅读
  • ASP.NET 配置文件层次结构和继承
  • System.Configuration命名空间
  • ConfigurationSection类
  • ConfigurationElement类
  • ConfigurationPropertyAttribute类
  • ConfigurationElementCollection类

https://www.codeproject.com/Articles/616065/Why-Where-and-How-of-NET-Configuration-Files

关注
打赏
1665926880
查看更多评论
立即登录/注册

微信扫码登录

0.1552s