.NET 项目如何管理资源及配置文件

news/2025/1/16 22:41:08/文章来源:https://www.cnblogs.com/jasongrass/p/18675777

.NET项目如何管理资源及配置文件_哔哩哔哩
.NET 项目的资源及配置文件(视频中的思维导图)

本文为以上视频的笔记

🍉 生成操作

Build actions for files - Visual Studio (Windows) | Microsoft Learn

复制到输出目录

这个是跟生成操作独立的一个配置,顾名思义,就是指是否将指定文件复制到输出目录。

生成操作配置

  • 🌳 无

  • 🌳 内容(content)

需要额外设置输出到生成目录

1 可以通过 GetContentStream 获取内容

var stream = Application.GetContentStream(new Uri("readme.txt", UriKind.Relative)).Stream;

2 常用于

readme.txt,C/C++ 类库,ini 文件等

3 注意点

路径中不能有 #

  • 🌳 嵌入的资源(Embedded Resource)

不推荐,有更好的方法,如后面的 Resources.resx

将会被嵌入到程序集文件中,可以通过 GetManifestResourceStream 读取。

System.Reflection.Assembly.GetManifestResourceStream("WpfApp1.readme.txt");
// WpfApp1 是程序集的名称

1 常用于

不希望用户看到,且只读的文件

  • 🌳 资源(Resource)

嵌入到输出的程序集文件中

1 可以直接在 xaml 中访问

// 将 pixel.jpg 的生成操作设置成资源
<Image Source="../Assets/pixel.jpg"/>
// 这里 MiSans Heavy 是字体名称,不是字体文件名
<Window.Resources><FontFamiLy x:Key="MiSans">../Assets/Fonts/#MiSans Heavy</FontFamiLy>
</Window.Resources><Grid><TextBLock FontSize="32" FontFamily="{StaticResource MiSans}">Hello,worLd!</TextBLock>
</Grid>

2 可以用 Application.GetResourceStream(Uri) 获取

3 会变成 obj 目录下的 AssemblyName.g.resources

4 常用于

图片、字体文件等会在.xaml中使用的资源

  • 🌳 编译 (Compile)

各种 .cs 文件

  • 🌳 页(Page)

xaml 预编译成 baml

App.xaml 以外的各种 .xaml 文件

  • 🌳 应用程序定义(ApplicationDefinition)

App.xaml 文件

  • 🌳 启动画面(Splash Screen)

将图片设置成这个,启动时会使用。很少使用。

以上就是 生成操作 的一些配置选项,常用的就是 内容资源

🍉 资源词典(ResourceDictionary)

FrameworkElement 的属性 Resources,每个 FrameworkElement 都有,一般在 xaml 中定义,就是常写 Style 的地方。

注意不要和 Properties.Resources 搞混

🍉 常出现在 Properties 文件夹命名中间中

Settings.settings

在 Framework 项目中自带,在 .NET Core 项目中,可以手动新建。或者通过添加新项 - 设置文件(C#项) 的方式添加。

Settings.settings 和 App.config 会自动联动,修改 Settings.settings 中的值,会自动更新 App.config。
反过来,修改 App.config 中的值,会提示是否更新 Settings.settings。
所以,如果需要修改值,一般只需要操作 Settings.settings。

Settings.settings 会自动生成一个 Settings.Designer.cs,里面有一个单例的 Settings 实例,可以快速访问其中的配置。

string value = Properties.Settings.Default.Key1;

在生成之后,会在输出目录生成类似 WpfApp.dll.config 这样的文件,里面就是记录的 Settings.settings 的配置。

对于应用程序类型的配置,配置是只读的,类似全局常量。对于用户类型的配置,可以修改并保存。

// Properties.Settings.Default.KeyApp1 = "new app 1";  // 只读
Properties.Settings.Default.KeyUser1 = "new user 1";
Properties.Settings.Default.Save();

用户类型的配置,会保存到系统的 AppData Local 下面的文件夹。

可以在 Properties 文件夹中,新建多个 settings 文件,都可以通过 Properties 命名空间直接访问。并且其中的配置,会被合并到 App.config 中。

Resources.resx

添加方式:添加新建项 - 资源文件(C#)

Resources 中的内容,都是只读的,而且处理字符串,可以添加图片,音视频等多媒体文件。最终会变成嵌入资源,打包到输出的 DLL 中。

嵌入的文件,文本文件会变成 string,直接拿到,二进制文件就是 byte[]。

// 也可以直接通过 Properties 命名空间访问。其中 Resources 就是新建的文件名。可以自定义名称。
string key1 = Properties.Resources.Key1;

因为 Resources 中的内容是静态资源,可以在 xaml 中直接使用。(将 Resources 的访问修饰符修改成 public)

// 引入命名空间
xmLns:prop="cLr-namespace:WpfApp1.Properties"Text="{x:Static prop:Resource.xxx}

Resources 的多语言写法。

Resources.resx Resources.zh-CN.resx

然后在代码中,如果如下方式切换语言项。

Thread.CurrentThread.CurrentCulture = new CultureInfo(name:"zh-CN");
Thread.CurrentThread.CurrentUICulture = new CuLtureInfo(name:"zh-CN");

可以实现多媒体文件的多语言管理。

注意,多语言使用时,多个 Resources 文件,只能有一个 Designer.cs 文件,类似下面这样,可以直接在资源管理器中,通过复制 Resources.resx 文件的方式,重命名得到 Resources.zh-CN.resx

可以通过 ResXManager 这个插件,来管理多语言版本的 Resources 文件。

ResXManager - Visual Studio Marketplace

以上的 Settings.settingsResources.resx,建议通过项目属性的方式,来有 VS 创建,会自动生成 Properties 文件夹,自动管理等。

🍉 常出现在根目录的一些文件

App.config

上面说 Settings.settings 提到了,是与 Settings.settings 联动的,无需手动修改和维护,在生成时,会变成 xxx.dll.config 出现在输出目录。

可以通过 System.Configuration.ConfigurationManager 访问,如果与 Settings.settings 联动,其实通过 Settings.settings 来编辑和访问,更方便。

appsettings.json

.NET Core 时代出来的新的程序配置文件,需要手动设置为「始终复制」,不需要生成操作。

需要安装 Microsoft.Extensions.Configuration 这个包才能访问。可以通过 ConfigurationBuilder 来构建,得到一个 IConfiguration 接口,来访问其中的配置。

icon.ico

程序的图标文件。
生成操作:内容。

🍉 更多

如何借助 App.config 文件管理.NET应用程序的配置项_哔哩哔哩

如何在 .NET 程序中使用 appsettings.json 文件管理配置项_哔哩哔哩

https://www.cnblogs.com/jasongrass/p/18675777

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

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

相关文章

实战分享:如何为企业量身打造AI助理

在当今这个数字化时代,AI技术正以前所未有的速度改变着企业的运营模式。AI助理,作为连接人与技术的桥梁,正逐渐成为企业提升效率、优化决策的重要工具。然而,如何为企业量身打造一款既高效又贴合需求的AI助理,却是许多企业面临的难题。本文将结合实战经验,分享构建企业专…

常用类学习

Java常有类:Object常有方法如getClass(),hashMap(),toString(),equals(),finalize()方法。和包装类等学习视频 object类超类、基类,所有类的直接或间接父类,位于继承树的最顶层。 任何类,如没有书写extends显示继承某个类,都默认直接继承object类否则为间接继承。 obj…

webpack5 从零搭建 vue3 项目

目前 vue3 官网推荐的工具链已经是 vite 了,就算是要使用 webpack 甚至是 webpack5,也可以直接使用 vue-cli。然而之所以写这个,可以当是 webpack5 的一个学习文章。同时也是因为之前有个项目是在 vue3 刚出来的时候使用 vue-cli (那是官网还是推荐使用 webpack,以及但是得…

2025-1-12至16-uniapp初体验

2025-1-12 今天主要就是在熟悉app开发软件应用,发现它的页面开发起来跟我们的web是一样的,初始界面就跟VScode操作一样,毕竟第一步是要做页面,然后它的控制台跟tomcat集成之后使用很像,之后就是复习一下web的css。盒子模型:margin:外边距 控制边框离屏幕的距离(top 上…

谷歌60s视频生成模型Veo的技术亮点

谷歌60s视频生成模型Veo的技术亮点如下: 高分辨率长视频生成 高分辨率输出:能够生成高质量的10谷歌60s视频生成模型Veo的技术亮点如下: 高分辨率长视频生成高分辨率输出:能够生成高质量的1080p分辨率视频,可满足长视频内容制作需求,如用于电影、广告等对画质要求较高的场…

【夸克网盘福利】如何领取1TB免费空间?小白三分钟学会!

Hello 大家好!我是你们的网盘省钱达人,今天给大家带来一个超实用的小技巧——**如何用夸克网盘免费领取1TB的存储空间**!没错,不用花一分钱,就能获得超大容量,随便存视频、照片、大文件,彻底告别“存储焦虑”。教程全程亲测有效,小白也能三分钟学会!废话不多说,快跟着…

Catlike Coding Custom SRP笔记 - SRP项目搭建

什么是SRP? 可编程渲染管线 (Scriptable Render Pipeline) 是 Unity 内置渲染管线的替代方案。 使用 SRP 可以通过 C# 脚本控制和定制渲染流程URP和SRP的区别? URP是基于SRP实现的一套渲染管线(由Unity官方实现,并以模板项目的方式提供给开发者使用)LWRP又是啥? 轻量级渲…

使用 Perspective 为 AI 艺术添加真实世界的深度

使用 Perspective 为 AI 艺术添加真实世界的深度 📖阅读时长:10分钟 🕙发布时间使用 Perspective 为 AI 艺术添加真实世界的深度 📖阅读时长:10分钟 🕙发布时间:2025-01-16近日热文:全网最全的神经网络数学原理(代码和公式)直观解释 欢迎关注知乎和公众号的专栏内…

字节跳动发布开源 Lip Sync AI 模型,视频换声对口型超轻松!

ByteDance新开源模型LatentSync,视频换声对口型超轻松! 阅读时长:9分钟 论文地址ByteDance新开源模型LatentSync,视频换声对口型超轻松!阅读时长:9分钟 论文地址: https://arxiv.org/pdf/2412.09262 发布时间:2025年1月8日字节跳动最近推出了LatentSync,这是一款全新的…

MobaXterm(远程终极工具箱) v24.4汉化专业版

MobaXterm是一款集多种远程功能于一身的工具,它通过支持SSH、Telnet、RDP、VNC等协议,让用户能够轻松远程连接至不同操作系统,如Linux、Unix和Windows。此外,它还具备文件传输功能,支持SCP、SFTP、FTP协议,方便用户在本地与远程设备间传输文件。关键特性图形界面支持:可…