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格式,但它们的用途和内容完全不同,分别用于不同的配置需求。