C#开发的应用的应用配置文件

注意:.net core和.net5+为appsettings.json

一、应用配置文件

在C#应用程序中,`.exe.config`文件(通常称为应用程序配置文件)是一个XML文件,用于存储应用程序的配置设置。这些设置可以包括数据库连接字符串、应用程序特定的设置、外部库的配置等。配置文件的名称通常与应用程序的可执行文件名匹配,并以 `.config` 结尾。例如,如果你的应用程序名为 `MyApp.exe`,那么相应的配置文件名通常为 `MyApp.exe.config`。

 配置文件的结构

一个典型的 `.exe.config` 文件的结构如下:

```xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Setting1" value="Value1" />
<add key="Setting2" value="Value2" />
</appSettings>
<connectionStrings>
<add name="MyDatabase" connectionString="Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="true" />
</system.web>
<!-- 其他配置节 -->
</configuration>
```

### 常见的配置节
1. **appSettings**:用于存储简单的键值对配置。
```xml
<appSettings>
<add key="Setting1" value="Value1" />
<add key="Setting2" value="Value2" />
</appSettings>
```

2. **connectionStrings**:用于存储数据库连接字符串。
```xml
<connectionStrings>
<add name="MyDatabase" connectionString="Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" providerName="System.Data.SqlClient" />
</connectionStrings>
```

3. **system.web**:用于配置与ASP.NET相关的设置(主要用于Web应用程序)。
```xml
<system.web>
<compilation debug="true" />
</system.web>
```

### 读取配置文件中的设置
在C#代码中,可以通过以下方式读取配置文件中的设置:

1. **读取appSettings**:
```csharp
using System;
using System.Configuration;

class Program
{
static void Main()
{
string setting1 = ConfigurationManager.AppSettings["Setting1"];
Console.WriteLine("Setting1: " + setting1);
}
}
```

2. **读取connectionStrings**:
```csharp
using System;
using System.Configuration;

class Program
{
static void Main()
{
string connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
Console.WriteLine("Connection String: " + connectionString);
}
}
```

 

使用配置文件的好处

- **集中管理配置**:所有的配置都集中在一个文件中,便于管理和修改。
- **环境独立**:可以为不同的环境(如开发、测试、生产)提供不同的配置文件,而无需修改代码。
- **易于部署**:配置文件可以在部署时进行修改,以适应不同的部署环境。

注意事项

- 配置文件中的敏感信息(如密码)应当妥善保护,可以使用加密技术对其进行保护。
- 修改配置文件后,通常不需要重新编译应用程序,但可能需要重新启动应用程序以使更改生效。

 

二、如何配置配置文件

配置 `.exe.config` 文件主要涉及将所需的配置项添加到文件中,并确保它们的格式和结构正确。以下是一些常见的配置场景,以及如何在 `.exe.config` 文件中进行配置。

### 1. 基本配置结构

一个基本的 `.exe.config` 文件结构如下:

```xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<!-- 键值对配置 -->
<add key="Setting1" value="Value1" />
<add key="Setting2" value="Value2" />
</appSettings>

<connectionStrings>
<!-- 数据库连接字符串配置 -->
<add name="MyDatabase" connectionString="Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" providerName="System.Data.SqlClient" />
</connectionStrings>

<!-- 其他配置节 -->
</configuration>
```

### 2. 配置 `appSettings`

`appSettings` 节用于存储简单的键值对配置。你可以在这个节中添加你需要的配置项。

```xml
<appSettings>
<add key="Setting1" value="Value1" />
<add key="Setting2" value="Value2" />
</appSettings>
```

### 3. 配置 `connectionStrings`

`connectionStrings` 节用于存储数据库连接字符串。你可以在这个节中添加数据库的连接信息。

```xml
<connectionStrings>
<add name="MyDatabase" connectionString="Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" providerName="System.Data.SqlClient" />
</connectionStrings>
```

### 4. 配置 `system.web`

如果你的应用程序是一个ASP.NET应用程序,你可能需要配置 `system.web` 节来设置与ASP.NET相关的配置。

```xml
<system.web>
<compilation debug="true" />
<authentication mode="Forms">
<forms loginUrl="Login.aspx" timeout="30" />
</authentication>
</system.web>
```

### 5. 自定义配置节

你也可以定义和使用自定义的配置节。首先,你需要在 `configSections` 节中声明自定义节,然后在 `configuration` 节中使用它。

```xml
<configuration>
<configSections>
<section name="myCustomSection" type="Namespace.MyCustomSection, AssemblyName" />
</configSections>

<myCustomSection>
<setting name="CustomSetting1" value="CustomValue1" />
</myCustomSection>
</configuration>
```

6. 加密配置节

对于敏感信息(如数据库连接字符串),你可以使用加密技术来保护这些信息。以下是加密 `connectionStrings` 节的示例:

```sh
aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "DataProtectionConfigurationProvider"
```

7. 读取配置文件中的设置

在C#代码中,你可以使用 `ConfigurationManager` 类来读取配置文件中的设置。

读取 `appSettings`:

```csharp
using System;
using System.Configuration;

class Program
{
static void Main()
{
string setting1 = ConfigurationManager.AppSettings["Setting1"];
Console.WriteLine("Setting1: " + setting1);
}
}
```

#### 读取 `connectionStrings`:

```csharp
using System;
using System.Configuration;

class Program
{
static void Main()
{
string connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
Console.WriteLine("Connection String: " + connectionString);
}
}
```
8. 自定义配置节类

如果你定义了自定义配置节,你需要创建一个对应的类来读取这些配置。

```csharp
using System.Configuration;

public class MyCustomSection : ConfigurationSection
{
[ConfigurationProperty("setting")]
public SettingElement Setting
{
get { return (SettingElement)this["setting"]; }
set { this["setting"] = value; }
}
}

public class SettingElement : ConfigurationElement
{
[ConfigurationProperty("name", IsRequired = true)]
public string Name
{
get { return (string)this["name"]; }
set { this["name"] = value; }
}

[ConfigurationProperty("value", IsRequired = true)]
public string Value
{
get { return (string)this["value"]; }
set { this["value"] = value; }
}
}

// 使用自定义配置节
MyCustomSection customSection = (MyCustomSection)ConfigurationManager.GetSection("myCustomSection");
Console.WriteLine(customSection.Setting.Name);
Console.WriteLine(customSection.Setting.Value);
```

 

 总结

配置 `.exe.config` 文件的过程主要是根据应用程序的需求,添加和组织所需的配置节,并在代码中读取这些配置。通过正确配置和使用 `.exe.config` 文件,可以使应用程序更加灵活和易于管理。

三、代码中读取配置

3.1 引用必要的命名空间

在你的C#代码中,确保引用 System.Configuration 命名空间:

using System;
using System.Configuration;

  

3.2 读取 appSettings

使用 ConfigurationManager 类读取 appSettings 中的配置项:

class Program
{
    static void Main()
    {
        string setting1 = ConfigurationManager.AppSettings["Setting1"];
        Console.WriteLine("Setting1: " + setting1);
    }
}

  

四、部署

在部署应用程序时,确保将生成的 YourApplicationName.exe.config 文件与可执行文件一起部署。这个文件通常位于输出目录(例如 bin\Debug 或 bin\Release)中。

五、高级配置

5.1 自定义配置节

如果需要自定义配置节,可以在 App.config 中定义新的配置节,并在代码中创建相应的类来读取这些配置。

<configuration>
  <configSections>
    <section name="myCustomSection" type="Namespace.MyCustomSection, AssemblyName" />
  </configSections>
  
  <myCustomSection>
    <setting name="CustomSetting1" value="CustomValue1" />
  </myCustomSection>
</configuration>

  

在代码中定义相应的类:

using System.Configuration;

public class MyCustomSection : ConfigurationSection
{
    [ConfigurationProperty("setting")]
    public SettingElement Setting
    {
        get { return (SettingElement)this["setting"]; }
        set { this["setting"] = value; }
    }
}

public class SettingElement : ConfigurationElement
{
    [ConfigurationProperty("name", IsRequired = true)]
    public string Name
    {
        get { return (string)this["name"]; }
        set { this["name"] = value; }
    }

    [ConfigurationProperty("value", IsRequired = true)]
    public string Value
    {
        get { return (string)this["value"]; }
        set { this["value"] = value; }
    }
}

// 使用自定义配置节
MyCustomSection customSection = (MyCustomSection)ConfigurationManager.GetSection("myCustomSection");
Console.WriteLine(customSection.Setting.Name);
Console.WriteLine(customSection.Setting.Value);

  

六、和清单文件的差异

在Visual Studio项目中,`.exe.config` 文件(也称为应用程序配置文件)和清单文件(manifest file)是两个不同的文件类型,分别用于不同的目的。以下是它们的主要区别和用途:

 应用程序配置文件(`.exe.config`)

 1. 目的
应用程序配置文件用于存储应用程序的可配置设置,如数据库连接字符串、应用程序设置、日志配置等。这些设置可以在运行时读取和更改,而无需重新编译应用程序。

 2. 位置
配置文件通常命名为 `App.config`,在编译时会被复制并重命名为 `YourApplicationName.exe.config`,存放在输出目录中(如 `bin\Debug` 或 `bin\Release`)。

 3. 格式
配置文件是XML格式的,包含不同的配置节,如 `appSettings`、`connectionStrings`、自定义配置节等。

 4. 示例

xml
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Setting1" value="Value1" />
<add key="Setting2" value="Value2" />
</appSettings>

<connectionStrings>
<add name="MyDatabase" connectionString="Server=myServer;Database=myDB;User Id=myUser;Password=myPass;" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>

  

5. 读取方式
在C#代码中,使用 `ConfigurationManager` 类读取配置文件中的设置:

csharp
using System;
using System.Configuration;

class Program
{
static void Main()
{
string setting1 = ConfigurationManager.AppSettings["Setting1"];
Console.WriteLine("Setting1: " + setting1);
}
}

  

清单文件(Manifest File)

1. 目的
清单文件用于描述应用程序的元数据,如应用程序的依赖关系、请求的权限、Windows版本兼容性、UAC(用户帐户控制)设置等。它主要用于配置应用程序的运行时行为和环境。

2. 位置
清单文件通常与应用程序的可执行文件一起放置,命名为 `YourApplicationName.exe.manifest`。在Visual Studio中,它通常被嵌入到应用程序的资源中。

3. 格式
清单文件也是XML格式的,包含应用程序的元数据和配置信息。

4. 示例

xml
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" name="MyApplication.app"/>
<description>My Application</description>
<dependency>
<dependentAssembly>
<assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" />
</dependentAssembly>
</dependency>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
<application>
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/> <!-- Windows 10 -->
</application>
</compatibility>
</assembly>

  

 5. 配置方式
在Visual Studio中,可以通过项目属性来配置清单文件:
1. 右键点击项目,选择“属性”。
2. 在“应用程序”选项卡中,点击“视图 Windows 设置”。
3. 在“视图 Windows 设置”对话框中,可以编辑清单文件。

 总结

- **应用程序配置文件(`.exe.config`)**:用于存储应用程序的可配置设置,可以在运行时读取和更改。
- **清单文件(Manifest File)**:用于描述应用程序的元数据和运行时行为,配置应用程序的依赖关系、权限和兼容性。

这两个文件虽然都是XML格式,但它们的用途和内容完全不同,分别用于不同的配置需求。



 

posted @ 2024-08-08 14:04  卖雨伞的小男孩  阅读(112)  评论(0编辑  收藏  举报