You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP中如何从引用的程序集读取资源文件?

从UWP引用程序集读取资源文件的正确姿势

首先得明确:你之前用的ms-appx:/// URI只能访问主应用包内的文件,引用的程序集里的资源如果是普通的Content设置,并不会自动放到主包的根目录,所以直接用这个URI肯定找不到。下面给你两种最常用的靠谱方案,根据你的资源类型选就行:

方案1:把类库资源设为Content,用带程序集名的URI访问

如果你的资源文件(比如文本、图片)在引用的类库中,先做两个关键设置:

  • 选中资源文件,在属性面板里把生成操作设为Content,复制到输出目录设为始终复制
  • 记住类库的程序集名称(就是项目属性里的“程序集名称”,不是项目文件夹名哦)

然后就可以用带程序集名的ms-appx:/// URI来访问了,格式是:

var file = await Windows.Storage.StorageFile.GetFileFromApplicationUriAsync(
    new Uri($"ms-appx:///[你的类库程序集名称]/[资源文件相对路径]")
);

举个例子:如果你的类库程序集名叫MyUwpClassLibrary,资源文件在类库的Assets文件夹下叫data.txt,那URI就是ms-appx:///MyUwpClassLibrary/Assets/data.txt

方案2:把资源设为Embedded Resource,通过程序集读取流

如果不想把资源暴露在包目录里,或者需要更灵活的流读取,可以把资源设为Embedded Resource:

  1. 选中资源文件,属性面板里把生成操作设为Embedded Resource,复制到输出目录可以设为不复制
  2. 获取类库的程序集实例,然后读取资源流:
// 先获取类库中任意类型的Type,用来定位程序集
var assembly = typeof(MyUwpClassLibrary.MyClass).GetTypeInfo().Assembly;
// 资源名称格式是:[程序集名称].[资源文件的相对路径(把/换成.)]
// 比如类库中Assets/data.txt,程序集名MyUwpClassLibrary,资源名就是MyUwpClassLibrary.Assets.data.txt
using (var stream = assembly.GetManifestResourceStream("MyUwpClassLibrary.Assets.data.txt"))
{
    // 这里可以读取流内容,比如转成字符串
    using (var reader = new StreamReader(stream))
    {
        var content = await reader.ReadToEndAsync();
        // 处理内容
    }
}

⚠️ 注意:资源名称的格式很容易错,你可以用assembly.GetManifestResourceNames()方法列出所有嵌入的资源名称,对照着找你要的那个,避免拼写错误。

额外提示

如果是类库中的resw字符串资源,直接用ResourceLoader指定资源所在的程序集即可:

var loader = ResourceLoader.GetForViewIndependentUse("MyUwpClassLibrary/Resources");
var text = loader.GetString("HelloWorld");

这里的Resources是类库中resw文件的名称(不带后缀)。

内容的提问来源于stack exchange,提问作者resp78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:19:27