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

ASP.NET Core引用的类库项目中如何初始化资源文件?

解决类库资源文件在引用项目中无法读取的问题

问题根源

你遇到的问题是因为UI项目运行时的工作目录是自身输出目录,而类库Lib的foo.json虽然设置了Copy always,但默认只会复制到UI输出目录的根目录(不会保留Lib里的Resources子目录结构),导致Lib的类用原相对路径找不到文件。

可行解决方案

方案1:保留文件结构复制

  1. 在Lib项目中选中Resources\foo.json,打开属性窗口
  2. 将生成操作设为Content,复制到输出目录设为Copy if newer
  3. 找到“高级”选项,将输出目录设置为Resources\
    这样文件会被复制到UI项目输出目录的Resources文件夹下,和Lib内的结构一致,Lib的类用Resources/foo.json的相对路径就能正常读取。

方案2:将资源嵌入类库(推荐)

这种方式让资源完全由Lib管理,无需依赖文件复制:

  1. 在Lib项目中选中foo.json,将生成操作改为Embedded resource,取消Copy always的设置
  2. 在Lib的类中通过程序集读取嵌入资源:
// 替换YourLibClass为Lib中任意类的类型
var assembly = typeof(YourLibClass).Assembly;
// 资源路径格式:类库命名空间.文件夹名.文件名,注意用点分隔
var resourceFullName = "Lib.Resources.foo.json";
using var stream = assembly.GetManifestResourceStream(resourceFullName);
if (stream == null) throw new FileNotFoundException("找不到嵌入的资源文件", resourceFullName);
using var reader = new StreamReader(stream);
var jsonContent = reader.ReadToEnd();

方案3:读取类库所在目录的资源

通过获取Lib程序集的物理路径来拼接资源地址,确保路径准确:

var libAssemblyDir = Path.GetDirectoryName(typeof(YourLibClass).Assembly.Location);
var jsonPath = Path.Combine(libAssemblyDir, "Resources", "foo.json");
var jsonContent = File.ReadAllText(jsonPath);

注意这个方案需要配合方案1的输出目录设置,确保foo.json被复制到UI输出目录下的Resources文件夹。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:00:49