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

ASP.NET Core C#项目中无法访问嵌入式资源该如何处理?

问题原因排查及解决方案

你当前GetManifestResourceStream的引用方式存在两处可能的问题,对应解决方法如下:

  1. 大小写匹配问题
    你在.csproj中设置的LogicalName值为Assets/Loyalty-template.html,文件名首字母L为大写,但代码中传入的参数是Assets/loyalty-template.html首字母l为小写,嵌入式资源名称大小写敏感,不匹配会直接返回null。
    如果要沿用当前LogicalName配置,直接将代码参数修改为完全匹配的Assets/Loyalty-template.html即可。

  2. 默认资源命名规则问题
    如果你删除了自定义的LogicalName配置,就需要遵守.NET嵌入式资源的默认命名规则:
    默认资源名格式为 {程序集默认命名空间}.{文件相对路径替换斜杠为点}
    比如你项目的默认命名空间为DemoProject,则对应资源名是DemoProject.Assets.loyalty-template.html,将该值作为参数传入即可。

通用验证方法

如果以上方法都不生效,可以先执行以下代码打印当前程序集内所有嵌入式资源的完整名称,直接复制对应资源名作为参数即可100%匹配:

// 输出当前程序集所有嵌入式资源名称
var allResourceNames = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceNames();
foreach (var resName in allResourceNames)
{
    System.Diagnostics.Debug.WriteLine(resName);
}

额外注意项

如果你的嵌入式资源定义在类库项目中,调用代码在其他项目,不要使用GetExecutingAssembly(会拿到调用方程序集,而非资源所在程序集),需要通过资源所在程序集的任意类型获取对应程序集,示例:

// 假设资源所在程序集有一个名为AssetLoader的类
var assembly = typeof(AssetLoader).Assembly;
using var stream = assembly.GetManifestResourceStream("对应资源名");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:57:00