.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.settings
和 Resources.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