ASP.NET Core引用的类库项目中如何初始化资源文件?
解决类库资源文件在引用项目中无法读取的问题
问题根源
你遇到的问题是因为UI项目运行时的工作目录是自身输出目录,而类库Lib的foo.json虽然设置了Copy always,但默认只会复制到UI输出目录的根目录(不会保留Lib里的Resources子目录结构),导致Lib的类用原相对路径找不到文件。
可行解决方案
方案1:保留文件结构复制
- 在Lib项目中选中
Resources\foo.json,打开属性窗口 - 将生成操作设为
Content,复制到输出目录设为Copy if newer - 找到“高级”选项,将输出目录设置为
Resources\
这样文件会被复制到UI项目输出目录的Resources文件夹下,和Lib内的结构一致,Lib的类用Resources/foo.json的相对路径就能正常读取。
方案2:将资源嵌入类库(推荐)
这种方式让资源完全由Lib管理,无需依赖文件复制:
- 在Lib项目中选中
foo.json,将生成操作改为Embedded resource,取消Copy always的设置 - 在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
相关产品推荐
相关产品推荐

