C# 配置文件:app.config 和 web.config

一、引言

在 C# 的应用开发中,配置文件就像是幕后的大管家,默默管理着应用程序的各种设置。今天,我们就来深入探索一下 C# 中极为重要的两个配置文件:app.config 和 web.config。无论是开发 Windows 应用程序,还是构建ASP.NET Web 应用,它们都发挥着关键作用。通过合理运用这两个配置文件,开发者能够轻松调整应用程序的行为,而无需对代码进行繁琐的修改,大大提升了开发效率和应用的灵活性。接下来,就让我们一起揭开它们的神秘面纱吧!

二、初相识:app.config 与 web.config

2.1 两者的定义与用途

app.config 是 Windows 应用程序(如控制台应用程序、Windows Forms 应用程序)的专属配置文件。它如同一个精密的设置箱,将应用程序所需的各种配置信息,如数据库连接字符串、应用程序的默认设置等,以 XML 格式进行存储。这种存储方式使得开发者在后期维护和调整应用程序时,无需重新编译整个项目,只需轻松修改 app.config 文件中的相关配置,就能实现应用程序行为的改变。例如,在一个 Windows Forms 的财务管理应用程序中,通过 app.config 可以方便地配置数据库连接字符串,当数据库服务器地址发生变化时,直接修改配置文件中的地址信息,应用程序就能顺利连接到新的数据库 。

而 web.config 则是ASP.NET Web 应用程序的得力配置助手。它承担着存储 Web 应用程序配置设置的重任,包括但不限于身份验证方式、授权规则、页面编译设置等。以一个在线商城的 Web 应用为例,web.config 可以配置用户的身份验证模式为表单验证,同时指定登录页面的 URL,还能设置页面的编译调试模式,在开发阶段设置为调试模式以便及时发现错误,上线后切换为发布模式提高性能 。

2.2 它们的相同与不同之处

从结构上看,app.config 和 web.config 极为相似,都采用 XML 格式,拥有清晰的层次结构,以作为根节点,内部包含多个子节点用于不同类型配置信息的存储。

在适用场景方面,它们有着明确的分工。app.config 专注于 Windows 应用程序的配置,而 web.config 则全心全意为ASP.NET Web 应用程序服务。例如,一个桌面版的绘图软件使用 app.config 配置画笔颜色、画布尺寸等默认设置;而一个在线绘图的 Web 应用则依靠 web.config 来配置用户的访问权限、页面的布局样式等与 Web 相关的设置 。

部分配置节点在两者中是通用的,像节点,都用于存储简单的键值对配置信息。在一个跨平台的新闻阅读应用中,无论是 Windows 桌面端还是 Web 端,都可以通过节点配置新闻源的 URL。然而,也有一些节点是各自特有的。比如,web.config 中的<system.web>节点,用于全面配置ASP.NET应用程序的各种 Web 相关特性,如身份验证、授权、会话状态等;而 app.config 中则没有这一特定节点,因为 Windows 应用程序不需要处理这些 Web 相关的功能 。

三、创建简单示例深入了解

3.1 基于 C# 控制台应用,创建并配置 app.config

3.1.1 新建控制台应用项目

打开 Visual Studio,在起始页面中点击 “创建新项目”。在弹出的 “创建新项目” 对话框里,左侧筛选器选择 “语言” 为 “C#”,“平台” 选择 “Windows”,“项目类型” 选择 “控制台”。接着,在中间的项目模板列表中,选中 “控制台应用 (.NET Core)” (若使用的是.NET Framework,可选择对应的控制台应用模板),在下方 “名称” 处输入项目名称,比如 “ConsoleAppConfigDemo”,设置好 “位置” 和 “解决方案名称” 后,点击 “创建” 按钮,一个全新的 C# 控制台应用项目便创建完成。

3.1.2 编写核心代码

在项目中找到 “Program.cs” 文件,双击打开。在其中输入如下代码:

using System;
using System.Configuration;namespace ConsoleAppConfigDemo
{class Program{static void Main(string[] args){// 读取配置文件中的值string appName = ConfigurationManager.AppSettings["AppName"];int portNumber = Convert.ToInt32(ConfigurationManager.AppSettings["PortNumber"]);Console.WriteLine("应用程序名称: " + appName);Console.WriteLine("监听端口: " + portNumber);Console.ReadLine();}}
}

上述代码中,通过引入System.Configuration命名空间,利用ConfigurationManager.AppSettings来获取app.config文件中定义的配置值。其中,AppName和PortNumber是我们后续将在app.config文件中配置的键名 。

3.1.3 构建并配置 app.config 文件

在项目的解决方案资源管理器中,右键点击项目名称,选择 “添加” -> “新建项”。在弹出的 “添加新项” 对话框中,选择 “应用程序配置文件”,保持默认名称 “app.config”,点击 “添加” 按钮。此时,项目中便生成了app.config文件。

为app.config文件添加如下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration><appSettings><!-- 配置应用程序名称 --><add key="AppName" value="我的控制台应用"/><!-- 配置监听端口 --><add key="PortNumber" value="8080"/></appSettings>
</configuration>

在这段配置中,节点用于存储一系列键值对形式的配置信息。标签用于添加具体的配置项,其中key属性指定配置项的键名,value属性指定对应的值。比如这里的AppName键对应的值为 “我的控制台应用”,PortNumber键对应的值为 “8080” 。

3.2 基于ASP.NET Web 应用,创建并配置 web.config

3.2.1 新建 Web 应用项目

打开 Visual Studio,点击 “创建新项目”。在 “创建新项目” 对话框中,左侧筛选器按 “语言” 选择 “C#”,“平台” 选择 “Web”,“项目类型” 选择 “ASP.NET”。中间模板列表里选择 “ASP.NET Web 应用程序 (.NET Core)”(若基于.NET Framework,选择对应的ASP.NET Web 应用程序模板),在下方输入项目名称,如 “WebAppConfigDemo”,设置好存放路径和解决方案名称后,点击 “创建”。在弹出的 “创建ASP.NET Web 应用程序” 对话框中,选择合适的模板,如 “空” 模板,然后点击 “创建”,项目创建完成 。

3.2.2 编写 Web 应用代码

在项目中找到 “Pages” 文件夹(若使用的是传统的ASP.NET Web Forms,找到 “Default.aspx.cs” 文件),在 “Index.cshtml.cs” 文件中添加如下代码:

using System;
using System.Configuration;
using Microsoft.AspNetCore.Mvc.RazorPages;namespace WebAppConfigDemo.Pages
{public class IndexModel : PageModel{public string AppName { get; set; }public int PortNumber { get; set; }public void OnGet(){// 读取配置文件中的值AppName = ConfigurationManager.AppSettings["AppName"];PortNumber = Convert.ToInt32(ConfigurationManager.AppSettings["PortNumber"]);}}
}

在上述代码中,通过ConfigurationManager.AppSettings从web.config文件中读取配置值。AppName和PortNumber属性用于在页面中展示读取到的配置信息。OnGet方法在页面加载时被调用,负责从配置文件中获取数据 。

同时,在 “Index.cshtml” 文件中添加如下代码,用于展示配置信息:

@page
@model WebAppConfigDemo.Pages.IndexModel
@{ViewData["Title"] = "首页";
}
<div><p>应用程序名称: @Model.AppName</p><p>监听端口: @Model.PortNumber</p>
</div>

这段代码通过@Model来访问IndexModel中的属性,将从配置文件中读取到的应用程序名称和监听端口展示在页面上 。

3.2.3 生成并配置 web.config 文件

若项目基于ASP.NET Core,在项目创建完成后,根目录下会自动生成web.config文件(若没有,可手动添加)。若基于传统的ASP.NET Web Forms,同样会自动生成web.config文件。

为web.config文件添加如下内容:

<?xml version="1.0" encoding="utf-8"?>
<configuration><appSettings><!-- 配置应用程序名称 --><add key="AppName" value="我的Web应用"/><!-- 配置监听端口 --><add key="PortNumber" value="8080"/></appSettings><system.web><compilation debug="true" targetFramework="4.8" /><httpRuntime targetFramework="4.8" /></system.web>
</configuration>

在这段配置中,节点的作用与app.config中的类似,用于存储键值对形式的配置信息。<system.web>节点则是ASP.NET应用程序特有的配置节点,其中标签用于配置编译相关的设置,debug="true"表示启用调试模式,在开发过程中便于调试代码;targetFramework指定了应用程序所使用的.NET Framework 版本。标签用于配置ASP.NET应用程序的运行时设置,targetFramework同样指定了.NET Framework 版本 。

四、深入剖析配置文件关键节点

4.1 appSettings 节点

在 C# 的配置文件中,节点就像一个灵活的 “小仓库”,专门用于存储各种简单的配置数据。它以键值对的形式组织信息,使得我们能够轻松地定义和获取应用程序所需的配置项。比如,在一个图片处理应用中,可以在节点中设置默认的图片保存路径。在app.config或web.config文件里添加如下配置:

<appSettings><add key="DefaultImageSavePath" value="C:\Images\Saved\" />
</appSettings>

在代码中,通过以下方式获取该配置值:

using System.Configuration;
string savePath = ConfigurationManager.AppSettings["DefaultImageSavePath"];

这样,在应用程序的不同地方,都能方便地使用这个配置值,当需要修改默认保存路径时,直接在配置文件中更改即可,无需重新编译代码。

4.2 connectionStrings 节点

节点对于需要与数据库交互的应用程序而言,堪称重中之重。它专门用于定义数据库连接字符串,这些连接字符串包含了连接数据库所需的关键信息,如数据库服务器地址、数据库名称、用户名、密码等。以连接 SQL Server 数据库为例,在web.config文件中可以这样配置:

<connectionStrings><add name="MyDbConnection" connectionString="Data Source=YourServerName;Initial Catalog=YourDatabaseName;User ID=YourUsername;Password=YourPassword" providerName="System.Data.SqlClient" />
</connectionStrings>

在上述配置中,name属性为连接字符串指定了一个唯一的名称,方便在代码中引用;connectionString属性详细定义了连接数据库的各项参数;providerName指定了数据库提供程序 。

在代码中,通过如下方式获取并使用该连接字符串:

using System.Configuration;
using System.Data.SqlClient;
string connectionString = ConfigurationManager.ConnectionStrings["MyDbConnection"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{// 执行数据库操作string query = "SELECT * FROM YourTable";SqlCommand command = new SqlCommand(query, connection);connection.Open();// 处理查询结果SqlDataReader reader = command.ExecuteReader();while (reader.Read()){// 读取数据}reader.Close();
}

正确配置节点,能够确保应用程序与数据库之间稳定、准确地连接,为数据的存储和读取提供坚实的基础。

4.3 system.web 节点(针对ASP.NET应用)

<system.web>节点是ASP.NET应用程序配置的核心部分,它涵盖了 Web 应用程序运行的各个关键方面。

在编译设置方面,通过子节点进行配置。例如:

<system.web><compilation debug="true" targetFramework="4.8"><assemblies><add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /></assemblies></compilation>
</system.web>

这里debug="true"表示在开发阶段启用调试模式,便于及时发现和解决代码中的问题;targetFramework指定了应用程序所使用的.NET Framework 版本。子节点用于添加应用程序所需的程序集引用 。

在身份验证方面,<system.web>节点也起着关键作用。以表单身份验证为例,配置如下:

<system.web><authentication mode="Forms"><forms loginUrl="~/Account/Login.aspx" timeout="30" /></authentication>
</system.web>

上述配置中,mode="Forms"指定了使用表单身份验证模式,loginUrl指定了登录页面的 URL,timeout设置了用户登录后的超时时间 。

此外,<system.web>节点还可以配置授权规则、会话状态、页面处理等众多与 Web 应用程序运行密切相关的设置,全面掌控着ASP.NET应用程序的行为和性能。

五、熟练掌握配置文件的使用技巧

5.1 读取配置文件中的信息

在 C# 中,读取配置文件中的信息是极为常见的操作。最常用的方式便是借助System.Configuration.ConfigurationManager类。例如,当我们想要读取appSettings节点中的配置值时,假设在app.config或web.config文件中有如下配置:

<appSettings><add key="DatabaseServer" value="YourServerName" /><add key="DatabaseName" value="YourDatabaseName" />
</appSettings>

在代码中,通过以下方式轻松获取:

using System.Configuration;
string server = ConfigurationManager.AppSettings["DatabaseServer"];
string database = ConfigurationManager.AppSettings["DatabaseName"];

对于connectionStrings节点中的数据库连接字符串,若配置如下:

<connectionStrings><add name="MyDbConnection" connectionString="Data Source=YourServerName;Initial Catalog=YourDatabaseName;User ID=YourUsername;Password=YourPassword" providerName="System.Data.SqlClient" />
</connectionStrings>

则在代码中使用如下方式读取:

using System.Configuration;
using System.Data.SqlClient;
string connectionString = ConfigurationManager.ConnectionStrings["MyDbConnection"].ConnectionString;
using (SqlConnection connection = new SqlConnection(connectionString))
{// 执行数据库操作
}

此外,在ASP.NET Core 项目中,还可以通过依赖注入的方式获取配置信息。首先,在Startup.cs文件中配置服务:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;public void ConfigureServices(IServiceCollection services)
{var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();services.AddSingleton<IConfiguration>(config);
}

然后,在需要使用配置信息的类中,通过构造函数注入IConfiguration:

public class MyService
{private readonly IConfiguration _config;public MyService(IConfiguration config){_config = config;}public void DoSomething(){string value = _config["SomeSetting"];}
}

5.2 更新配置文件(谨慎操作)

在运行时更新配置文件虽然可行,但务必谨慎为之,因为这一操作可能会引发应用程序的不稳定。在传统的 C# 项目中,若要更新app.config或web.config文件,可以使用System.Configuration.ConfigurationManager.OpenExeConfiguration方法。例如,将appSettings节点中的AppName配置值进行更新:

using System.Configuration;
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
config.AppSettings.Settings["AppName"].Value = "新的应用名称";
config.Save(ConfigurationSaveMode.Modified);
ConfigurationManager.RefreshSection("appSettings");

上述代码中,首先打开配置文件,接着修改指定配置项的值,随后保存更改,并刷新appSettings节,使修改后的配置能够立即生效。

在ASP.NET Core 项目中,更新配置文件的方式稍有不同。假设配置文件为appsettings.json,要更新其中的配置值,可以通过以下步骤:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using System.IO;var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
var appSettingsSection = config.GetSection("AppSettings");
appSettingsSection["SomeSetting"] = "新的值";
var jsonConfig = JsonConvert.SerializeObject(config.AsEnumerable());
File.WriteAllText("appsettings.json", jsonConfig);

在此过程中,先构建配置对象,获取需要更新的配置节,修改配置值后,将配置对象重新序列化为 JSON 格式,并写回配置文件。不过,在实际应用中,尤其是在生产环境下,这种直接在运行时更新配置文件的操作应经过充分的测试和评估,以避免对应用程序的正常运行造成不良影响。

六、其他进阶配置选项拓展

6.1 自定义配置节

在实际的项目开发中,有时现有的标准配置节点无法满足复杂的业务需求,这时自定义配置节就派上了用场。自定义配置节允许我们根据项目的特定需求,灵活地定义和组织配置信息。

实现自定义配置节主要分为两个关键步骤。首先,需要编写一个配置节处理器类。这个类要继承自ConfigurationSection类,通过它来定义我们所需的配置属性。例如,我们创建一个用于管理系统用户权限配置的类:

using System.Configuration;public class UserPermissionsSection : ConfigurationSection
{[ConfigurationProperty("adminPermissions", IsRequired = true)]public string AdminPermissions{get { return (string)this["adminPermissions"]; }set { this["adminPermissions"] = value; }}[ConfigurationProperty("userPermissions", IsRequired = true)]public string UserPermissions{get { return (string)this["userPermissions"]; }set { this["userPermissions"] = value; }}
}

在上述代码中,UserPermissionsSection类定义了两个属性adminPermissions和userPermissions,用于存储管理员和普通用户的权限信息。ConfigurationProperty特性用于指定属性的相关配置,如是否为必需属性等 。

接着,在app.config或web.config文件中声明这个自定义配置节。在文件的节点内添加如下内容:

<configSections><section name="userPermissions" type="Namespace.UserPermissionsSection, AssemblyName" />
</configSections>

这里的name属性指定了在配置文件中引用该配置节时使用的名称,type属性指定了配置节处理器类的完整命名空间和所在程序集名称。随后,在节点下添加自定义配置节的具体配置:

<userPermissions><adminPermissions>FullAccess</adminPermissions><userPermissions>LimitedAccess</userPermissions>
</userPermissions>

这样,在代码中就可以通过ConfigurationManager.GetSection方法获取自定义配置节的信息,并进行相应的处理。例如:

UserPermissionsSection userPermissions = (UserPermissionsSection)ConfigurationManager.GetSection("userPermissions");
string adminPermissions = userPermissions.AdminPermissions;
string userPermissionsValue = userPermissions.UserPermissions;

6.2 加密配置文件敏感信息

在当今注重数据安全的环境下,配置文件中的敏感信息,如数据库连接字符串、API 密钥等,一旦泄露,可能会给应用程序带来严重的安全风险。因此,对配置文件中的部分或全部内容进行加密就显得尤为重要。

在 C# 中,可以借助aspnet_regiis.exe工具来实现配置文件的加密。以加密web.config文件中的节点为例,在命令提示符中,切换到.NET Framework对应的版本目录(例如C:\Windows[Microsoft.NET](http://Microsoft.NET)\Framework\v4.8.04084),然后执行以下命令:

aspnet_regiis -pe "connectionStrings" -app "/YourApplicationName" -prov "DataProtectionConfigurationProvider"

上述命令中,-pe表示加密操作,"connectionStrings"指定了要加密的节点名称,-app指定了应用程序的虚拟路径,-prov指定了加密提供程序。执行该命令后,web.config文件中的节点内容将被加密,加密后的内容类似如下:

<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider"><EncryptedData><CipherData><CipherValue>...</CipherValue></CipherData></EncryptedData>
</connectionStrings>

当应用程序运行时,.NET 会自动使用指定的加密提供程序对加密内容进行解密,开发人员在代码中无需额外编写解密代码,就可以像往常一样通过ConfigurationManager.ConnectionStrings获取连接字符串 。

如果需要对app.config文件进行加密,由于aspnet_regiis.exe工具主要针对web.config,可以先将app.config重命名为web.config,执行加密操作后再改回原名。同时,在实际应用中,要妥善保管加密密钥,避免密钥泄露导致加密失去意义。例如,可以将密钥存储在安全的服务器配置中,只有授权的系统管理员才能访问。

七、总结回顾

在本次 C# 配置文件的探索之旅中,我们深入了解了 app.config 和 web.config 的诸多奥秘。从它们的基础定义、创建与配置方法,到关键节点的剖析,再到读取、更新以及进阶的自定义配置节和加密敏感信息等操作,每一步都为我们在 C# 应用开发中灵活管理配置提供了有力支持。

这两个配置文件就如同开发中的得力助手,让我们能够轻松应对各种配置需求,无论是简单的应用程序设置,还是复杂的数据库连接、安全配置等。希望大家在今后的 C# 开发项目中,能够熟练运用这些知识,根据项目的实际需求,巧妙地配置 app.config 和 web.config,为打造高效、稳定且安全的应用程序奠定坚实的基础。让我们在代码的世界里,借助配置文件的力量,创造出更加优秀的软件作品 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/67150.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 设计模式 工厂模式

什么是工厂模式 工厂模式&#xff08;Factory Pattern&#xff09;是一种创建型设计模式&#xff0c;它通过定义一个接口或抽象类来创建对象&#xff0c;但由子类决定具体实例化哪个类。简单来说&#xff0c;工厂模式将对象的实例化过程封装起来&#xff0c;客户端通过工厂方法…

[创业之路-248]:《华为流程变革:责权利梳理与流程体系建设》华为流程的前端拉动后端,与计算机软件的前端应用与后端程序的类比关系

华为的前端拉动后端模式与计算机前端应用与后端程序的类比关系&#xff0c;虽然两者属于不同的领域&#xff0c;但在某些方面存在有趣的相似性。以下是对这两者的类比关系的详细探讨&#xff1a; 一、华为的前端拉动后端模式 定义与特点&#xff1a; 华为的前端拉动后端模式是…

深入Node.js集群:原理、优势与搭建实战,如何应对高并发

文章目录 一、Node.js 集群简介二、Node.js 集群原理剖析2.1 主从模型2.2 负载均衡机制2.3 进程间通信&#xff08;IPC&#xff09; 三、Node.js 集群优势详解3.1 性能提升3.2 高可用性3.3 资源利用率优化 四、Node.js 集群搭建实战4.1 准备工作4.2 创建主控制节点4.3 工作节点…

数字普惠金融对新质生产力的影响研究(2015-2023年)

基于2015—2023年中国制造业上市公司数据&#xff0c;探讨了数字普惠金融对制造业企业新质生产力的影响及作用机理。研究发现&#xff0c;数字普惠金融有助于促进制造业企业新质生产力的发展&#xff0c;尤其是在数字普惠金融的使用深度较大的情况下&#xff0c;其对新质生产力…

数据仓库基础常见面试题

1.数据仓库是什么 ‌数据仓库&#xff08;Data Warehouse&#xff09;是一个面向主题的、集成的、非易失的、随时间变化的数据集合&#xff0c;用于支持企业的管理决策‌。它不同于传统的操作型数据库&#xff0c;后者主要用于处理日常业务交易和实时查询&#xff0c;而数据仓库…

记一次OpenEuler Linux磁盘分区表损坏的数据恢复

问题复现 原本有一台GIS地图服务器存放大量数据&#xff0c;突然有一天磁盘满了&#xff0c;于是运维人员照常进行磁盘扩容。但由于误操作&#xff0c;导致使用fdisk的时候把分区表损坏了&#xff0c;表现如下&#xff1a; 这里可以看到启动时能看到xvda被分为了xvda1和xvda2…

分布式数据存储基础与HDFS操作实践(副本)

以下为作者本人撰写的报告&#xff0c;步骤略有繁琐&#xff0c;不建议作为参考内容&#xff0c;可以适当浏览&#xff0c;进一步理解。 一、实验目的 1、理解分布式文件系统的基本概念和工作原理。 2、掌握Hadoop分布式文件系统&#xff08;HDFS&#xff09;的基本操作。 …

【数据结构学习笔记】19:跳表(Skip List)

介绍 跳表是一个能在 O ( n l o g n ) O(nlogn) O(nlogn)时间完成查找、插入、删除的数据结构&#xff0c;相比于树形结构优点就是很好写&#xff08;所以也用于实现Redis ZSet&#xff09;。其核心思想就是维护一个元素有序的&#xff0c;能随机提升索引层数的链表。最下面一…

如何使用 PHP 操作亚马逊 S3 对象云存储

以下是使用PHP与亚马逊S3对象云存储&#xff08;也有其他支持S3协议的云存储服务&#xff0c;原理类似&#xff09;进行交互的常见文档接口使用示例&#xff0c;涵盖了基本的操作如上传文件、下载文件、删除文件、列举文件等内容。 ### 前提条件 1. 首先&#xff0c;你需要获取…

APP推荐:全新TV端来了,8K原画电视版

▌ 软件介绍 B站都不陌生吧&#xff0c;一个能追番、学习、娱乐的多元平台&#xff0c;之前也分享过几款第三方TV端&#xff0c;其中的BV最近更新了全新版本。 使用了全新的UI界面&#xff0c;由之前的顶部菜单栏改成了侧边布局&#xff0c;已解锁限制&…

Pcl联合Qt显示点云

基于vs2022 勾选opengl&#xff0c;openglwidgets&#xff0c;并将widget控件提示为QVTKOpenGLNativeWidget Qt_Pcls.h #pragma once #include <QtWidgets/QMainWindow> #include "ui_Qt_Pcls.h" #include <vtkGenericOpenGLRenderWindow.h> #include &…

pip install transformers教程

直接pip install transformers会报错&#xff0c;报错内容如下&#xff1a; Collecting safetensors>0.3.1 (from transformers)Using cached safetensors-0.5.2.tar.gz (66 kB)Installing build dependencies ... doneGetting requirements to build wheel ... donePrepar…

【数据结构】基础知识

目录 1.1 什么是数据结构 1.2数据 1.3 逻辑结构 1.4 存储结构 1.4.1 顺序存储 1.4.2 链式存储 1.4.3 索引存储 1.4.4 散列存储 1.5 操作 1.1 什么是数据结构 数据的逻辑结构以及存储操作 数据结构没有那么复杂&#xff0c;它就教会你一件事&#xff1a;如何更有效的…

【Rust】变量与可变性

目录 思维导图 1. 变量与可变性 1.1 不可变性 1.2 可变性 2. 常量 2.1 定义与特性 3. 变量遮蔽&#xff08;shadowing) 3.1 影子机制 3.2 遮蔽与可变性的区别 4.示例 4.1 变量和可变性示例 4.2 可变变量示例&#xff1a; 4.3 常量示例&#xff1a; 4.4 遮蔽示例&a…

第27章 汇编语言--- 设备驱动开发基础

汇编语言是低级编程语言的一种&#xff0c;它与特定的计算机架构紧密相关。在设备驱动开发中&#xff0c;汇编语言有时用于编写性能关键的部分或直接操作硬件&#xff0c;因为它是接近机器语言的代码&#xff0c;可以提供对硬件寄存器和指令集的直接访问。 要展开源代码详细叙…

Mycat读写分离搭建及配置超详细!!!

目录 一、Mycat产生背景二、Mycat介绍三、Mycat安装四、Mycat搭建读写分离1、 搭建MySQL数据库主从复制2、 基于mysql主从复制搭建MyCat读写分离 五、Mycat启动常见错误处理1、Caused by: io.mycat.config.util.ConfigException: SelfCheck### schema TESTDB refered by user u…

【6】Word:海名公司文秘❗

目录 题目 List.docx Word.docx List.docx和Word.docx 题目 List.docx 选中1/4全角空格复制→选中全部文本→开始→替换&#xff1a;粘贴将1/4全角空格 替换成 空格选中全部文本→插入→表格→将文本转化成表格→勾选和布局→自动调整→勾选 选中第一列&#xff0c;单机右键…

【Rust】引用与借用

目录 思维导图 1. 引用与借用的基本概念 1.1. 引用示例 2. 借用的规则 2.1. 可变借用示例 2.2. 借用的限制 3. 引用的生命周期 思维导图 1. 引用与借用的基本概念 引用的定义&#xff1a;引用是一种指向数据的指针&#xff0c;但与裸指针不同&#xff0c;Rust的引用在编…

贪心算法详细讲解(沉淀中)

文章目录 1. 什么是贪心算法&#xff1f;&#xff08;贪婪鼠目寸光&#xff09;经典例题1.1.1 找零问题1.1.2最小路径和1.1.3 背包问题 2.贪心算法的特点2.1 证明例1 3.学习贪心的方向心得体会 1. 什么是贪心算法&#xff1f;&#xff08;贪婪鼠目寸光&#xff09; 贪心策略&a…

【专题】2025年节日营销趋势洞察报告汇总PDF洞察(附原数据表)

原文链接&#xff1a; https://tecdat.cn/?p38813 在当今复杂多变且竞争激烈的消费市场环境下&#xff0c;节日营销已成为企业获取市场份额、提升品牌影响力的关键战略时机。我们深知深入洞察节日营销趋势对于企业决策的重要性。 本报告汇总基于对 2024 年多个关键消费节点及…