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

.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 文件管理配置项_哔哩哔哩

作者:JasonGrass

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

版权:本作品采用「署名 4.0 国际」许可协议进行许可。

posted @   J.晒太阳的猫  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示