C#中解决字符串在编译后无法修改的情况

news2024/9/22 4:08:24

文章目录

  • 一、配置文件
  • 二、使用方式
      • 对于.NET Framework应用程序(使用app.config)
      • 对于.NET Core和.NET 5/6应用程序(使用appsettings.json)
  • 三、应用实例

一、配置文件

在C#等编程语言中,硬编码(直接在代码中写入)的字符串和其他配置信息在编译后就无法修改了,因为它们成为了程序的一部分。这在很多情况下是不方便的,尤其是当我们需要根据不同的部署环境(如开发、测试、生产)来改变这些值时。

配置文件允许开发者在不重新编译应用程序的情况下更改这些值。例如,数据库连接字符串、API密钥、服务端点地址等,都可以存储在配置文件中。当应用程序启动时,它会读取这些配置文件,并获取所需的配置信息。这样,如果需要更改配置,只需更改配置文件中的相应字符串,而无需更改代码并重新编译应用程序。

这种方法提高了应用程序的灵活性和可维护性,并且对于管理敏感信息也更加安全,因为我们可以避免在源代码中直接暴露这些信息。此外,配置文件还支持为不同的环境设置不同的配置,这在现代软件开发中是一个非常常见的需求。

常见的配置文件类型包括:

  1. app.configweb.config:这两种类型的配置文件通常用于.NET框架应用程序。app.config 用于Windows应用程序(如Windows窗体应用、控制台应用),而web.config 用于ASP.NET基于Web的应用程序。它们都是XML格式的文件,可以包含数据库连接字符串、应用程序设置、日志配置等。

  2. .json 配置文件:在.NET Core 和 .NET 5/6 应用程序中,配置信息通常存储在JSON格式的文件中,例如appsettings.json。与XML格式的配置文件相比,JSON文件通常更加简洁易读。appsettings.json文件可以包含环境特定的设置,例如开发环境和生产环境可能使用不同的数据库连接字符串。

使用配置文件的好处包括:

  • 灵活性:应用程序的配置可以在不重新编译代码的情况下进行更改,这对于调整设置和修正问题非常有用。
  • 环境适应性:可以为不同的运行环境(如开发环境、测试环境、生产环境)创建不同的配置文件,从而使同一份代码基础能够适用于多个环境。
  • 安全性:敏感信息,如数据库的连接字符串,可以从代码中分离出来,通过使用加密或其他安全机制来保护配置文件,提升应用程序的安全性。
  • 易于维护:由于配置信息集中存储,应用程序的配置和管理相对而言更加集中和简单。

在C#程序中,可以使用.NET框架或.NET Core提供的API来读取和管理这些配置文件中的设置,使得开发者能够以编程方式访问并利用这些配置信息。

二、使用方式

在Windows应用程序中使用配置文件,通常指的是使用app.config文件(对于.NET Framework应用程序)或appsettings.json文件(对于.NET Core和.NET 5/6应用程序)。以下分别说明这两种情况下如何使用配置文件:

对于.NET Framework应用程序(使用app.config)

  1. 创建或编辑app.config文件

    在Visual Studio中的项目中,添加一个名为app.config的配置文件(如果尚未存在)。这个文件在编译时会被自动重命名为[应用程序名称].exe.config

  2. 编辑app.config文件

    app.config文件是一个XML文件,你可以在其中添加自定义的配置节或使用预定义的配置节,比如connectionStringsappSettings部分。例如:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <appSettings>
        <add key="Setting1" value="This is a setting"/>
      </appSettings>
      <connectionStrings>
        <add name="DatabaseConnectionString" connectionString="Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"/>
      </connectionStrings>
    </configuration>
    
  3. 在代码中读取配置

    使用System.Configuration命名空间下的ConfigurationManager类来读取配置信息。首先,确保项目引用了System.Configuration程序集。

    读取appSettings部分的设置:

    string setting1 = ConfigurationManager.AppSettings["Setting1"];
    

    读取数据库连接字符串:

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

对于.NET Core和.NET 5/6应用程序(使用appsettings.json)

  1. 创建或编辑appsettings.json文件

    在项目中添加一个名为appsettings.json的JSON格式的配置文件(如果尚未存在)。你也可以为不同的环境创建特定的配置文件,如appsettings.Development.json

  2. 编辑appsettings.json文件

    appsettings.json文件中,我们可以自由定义JSON结构来保存配置信息。例如:

    {
      "AppSettings": {
        "Setting1": "This is a setting"
      },
      "ConnectionStrings": {
        "DatabaseConnectionString": "Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"
      }
    }
    
  3. 在代码中读取配置

    在.NET Core和.NET 5/6中,通常使用依赖注入来获取配置。首先,确保Microsoft.Extensions.Configuration包已经安装和配置。

    示例代码段(在Startup.cs或相应的初始化代码中):

    public IConfiguration Configuration { get; }
    
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }
    

    然后,在应用程序的任何部分,你可以通过IConfiguration接口读取配置信息:

    var setting1 = Configuration["AppSettings:Setting1"];
    var connectionString = Configuration.GetConnectionString("DatabaseConnectionString");
    

以上就是在.NET Framework和.NET Core/.NET 5/6 Windows应用程序中使用配置文件的基本方法。

三、应用实例

比如我们要用配置文件存储连接数据库的信息,如下:

 private static string connString =
            "Server=DESKTOP-1JMUPMG\\MSSQLSERVER1;DataBase=StudentManageDB;Uid=sa;Pwd=151423qwe,+";

这是我们连接数据库的信息,注意这里面的数据库用户名是DESKTOP-1JMUPMG\MSSQLSERVER1,可以发现里面少了一个斜杠,这是因为在编译的时候一个“\”,需要用“\”才能表示,要记住这个细节。
接下来我们配置App.config文件,首先注意第一点,这个文件一定要添加在我们的根目录中,也就是我们的最开始的项目,最主要的那个项目。右击这个项目,添加新建项,选择如下,注意一定不要改名字:
在这里插入图片描述
接下来我们看到:
在这里插入图片描述
需要在其中添加:
在这里插入图片描述
具体内容:

<connectionStrings>
    <add name="connString" connectionString =
 "Server=DESKTOP-1JMUPMG\MSSQLSERVER1;DataBase=StudentManageDB;Uid=sa;Pwd=151423qwe,+"/>
    </connectionStrings>

注意和前面的信息做一下对比。这里不用担心“\”的问题,也就不用多加一个斜杠符号了。
接下来我们需要在使用到这段信息的项目中添加一个System.Configuration的引用,并在最上方写好:

using System.Configuration; //引入读取配置文件的命名空间

然后我们只需要写下面这样的代码:

 public  static string connString = ConfigurationManager.ConnectionStrings[""].ToString(); 

运行后就得到了一个这样的文件:
在这里插入图片描述
用记事本打开就可以看到:
在这里插入图片描述
如果要修改信息,直接在这里面修改就好了。

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

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

相关文章

#Linux(编写第一个命令)

&#xff08;一&#xff09;发行版&#xff1a;Ubuntu16.04.7 &#xff08;二&#xff09;记录&#xff1a; &#xff08;1&#xff09;编写一个c程序然后将生成的可执行的文件加入环境变量或者放入bin目录中&#xff0c;即可在其他目录下调用&#xff08;之前编写的程序只能在…

深度学习 Lecture 4 Adam算法、全连接层与卷积层的区别、图计算和反向传播

一、Adam算法&#xff08;自适应矩估计&#xff09; 全名&#xff1a;Adapative Moment Estimation 目的&#xff1a;最小化代价函数&#xff08;和梯度下降一样&#xff09; 本质&#xff1a;根据更新学习率后的情况自动更新学习率的值(可能是自动增大&#xff0c;也可能是…

基于python+vue共享单车信息系统的设计与实现flask-django-php-nodejs

课题主要分为二大模块&#xff1a;即管理员模块和用户模块&#xff0c;主要功能包括&#xff1a;用户、区域、共享单车、单车租赁、租赁归还、报修信息、检修信息等&#xff1b;快速发展的社会中&#xff0c;人们的生活水平都在提高&#xff0c;生活节奏也在逐渐加快。为了节省…

酷开科技OTT大屏营销重构新生,让营销被看见

在过去的十年间&#xff0c;中国视听新媒体产业迎来了发展的黄金时代。这一时期&#xff0c;见证了视听新媒体业态的广泛涌现&#xff0c;它们不仅迅速成长和扩张&#xff0c;而且逐步走向了成熟。互联网电视的兴起&#xff0c;为消费者带来了多样化的视听内容享受方式&#xf…

【Linux多线程】线程的概念

【Linux多线程】线程的概念 目录 【Linux多线程】线程的概念Linux线程的概念什么是线程重新定义线程和进程 进程地址空间第四讲线程的优点线程的缺点线程异常线程的用途 Linux进程VS线程进程和线程关于进程线程的问题 Linux线程控制POSIX线程库创建线程如何给线程传参&#xff…

鸿蒙Harmony应用开发—ArkTS-全局UI方法(菜单)

在页面范围内关闭通过bindContextMenu属性绑定的菜单。 说明&#xff1a; 从API Version 8开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 ContextMenu.close 方法描述close(): void可以通过该方法在页面范围内关闭通过bindContextMenu给…

onlyoffice创建excel文档

前提 安装好onlyoffice然后尝试api开发入门 编写代码 <html> <head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0"&…

3D高斯泼溅的崛起

沉浸式媒体领域正在以前所未有的速度发展&#xff0c;其中 3D 高斯溅射成为一项关键突破。 这项技术在广泛的应用中看起来非常有前景&#xff0c;并且可能会彻底改变我们未来创建数字环境以及与数字环境交互的方式。 在本文中&#xff0c;我们将通过与摄影测量和 NeRF 等前辈进…

数学建模(Topsis python代码 案例)

目录 介绍&#xff1a; 模板&#xff1a; 案例&#xff1a; 极小型指标转化为极大型&#xff08;正向化&#xff09;&#xff1a; 中间型指标转为极大型&#xff08;正向化&#xff09;&#xff1a; 区间型指标转为极大型&#xff08;正向化&#xff09;&#xff1a; 标…

低压MOS在无人机上的应用-REASUNOS瑞森半导体

一、前言 无人机的结构由机身、动力系统、飞行控制系统、链路系统、任务载荷等几个方面组成的。 无人机动力系统中的电机&#xff0c;俗称“马达”&#xff0c;是无人机的动力来源&#xff0c;无人机通过改变电机的转速来改变无人机的飞行状态。即改变每个电机的速度&#xf…

灵境矩阵:开启无代码写作新时代,AI智能平台引领创作潮流

灵境矩阵 “灵境杯”智能体创意大赛&#xff0c;瓜分百万超级奖励 在当今数字化快速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐渐渗透到我们生活的方方面面。从智能家居到自动驾驶&#xff0c;AI的应用领域不断扩大&#xff0c;而今天&#xff0c;我们…

在基于Android相机预览的CV应用程序中使用 OpenCL

查看&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV4.9.0在Android 开发简介 下一篇&#xff1a;在 MacOS 中安装 本指南旨在帮助您在基于 Android 相机预览的 CV 应用程序中使用 OpenCL ™。教程是为 Android Studio 20…

软考 系统架构设计师系列知识点之云原生架构设计理论与实践(1)

所属章节&#xff1a; 第14章. 云原生架构设计理论与实践 第1节 云原生架构产生背景 云原生&#xff08;Cloud Native&#xff09;是近几年云计算领域炙手可热的话题&#xff0c;云原生技术已成为驱动业务增长的重要引擎。同时&#xff0c;作为新型基础设施的重要支撑技术&…

DMHS同步之MYSQL to MYSQL

一、环境情况 二、源端及目的端安装MySQL&#xff0c;可参考网上资料&#xff0c;此处省略安装过程 三、目的端安装配置unixODBC 1.上传unixODBC-2.3.12.tar.gz包到/opt下 2.解压 cd /opt tar -zvxf unixODBC-2.3.12.tar.gz复制 3.安装 cd unixODBC-2.3.11 ./configure …

使用 React antd 的ProFormSelect组件 搜索查询 多选的写法

使用 React antd 的ProFormSelect组件 搜索查询 多选的写法 需求&#xff1a;需要一个搜索框&#xff0c;可以选择员工&#xff0c;&#xff08;员工人数多无法一次性获取&#xff0c;全部放入options中&#xff09;&#xff0c;所以需要使用搜索功能&#xff0c;而且是可以多…

WebXR实践——利用aframe框架浏览器展示全景图片

一、效果 话不多说&#xff0c;先上效果 二、代码 index.html <!DOCTYPE html> <html><head><meta charset"utf-8"><title>360&deg; Image</title><meta name"description" content"360&deg; Imag…

【QT入门】 Qt槽函数五种常用写法介绍

声明&#xff1a;该专栏为本人学习Qt知识点时候的笔记汇总&#xff0c;希望能给初学的朋友们一点帮助(加油&#xff01;) 往期回顾&#xff1a; 【QT入门】实现一个简单的图片查看软件-CSDN博客 【QT入门】图片查看软件(优化)-CSDN博客 【QT入门】 lambda表达式(函数)详解-CSDN…

odoo扩展导出pdf功能

1. 说明: odoo原生导出功能扩展导出pdf文件功能, 如有额外需求请联系博主 2. 版本说明: odoo版本: odoo15 其他odoo版本未进行测试,如有需要自行测试 3. 地址: 该补丁代码放在github仓库, 地址: https://github.com/YSL-Alpaca/odoo_export_pdf 4. 改补丁依赖于第三方软件wkh…

数学建模(灰色关联度 python代码 案例)

目录 介绍&#xff1a; 模板&#xff1a; 案例&#xff1a;哪些原因影响结婚率 数据标准化&#xff1a; 灰色关联度系数&#xff1a; 完整代码&#xff1a; 结果&#xff1a; 介绍&#xff1a; 灰色关联度是一种多指标综合评价方法&#xff0c;用于分析和评价不同指标之…

【MySQL】对表的相关操作(DDL)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习计网、mysql和算法 ✈️专栏&#xff1a;MySQL学习 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac…