【问题标题】:Cannot access embedded resource in ASP.NET Core C# project?无法访问 ASP.NET Core C# 项目中的嵌入式资源?
【发布时间】:2021-10-10 12:23:27
【问题描述】:

我正在尝试将流设置为等于我的 ASP.NET Core 项目中嵌入资源的文本内容。但是,在调试时,流一直被设置为空,我认为这是因为它无法找到这个嵌入的资源开始。

我已通过转到“属性”>“构建操作”>“嵌入式资源”将文件设置为嵌入式资源。然后我还编辑了项目.csproj 文件以包含一个项目组,该项目组引用要包含的文件:

<ItemGroup>
  <EmbeddedResource Include="Assets/loyalty-template.html">
    <LogicalName>Assets/Loyalty-template.html</LogicalName>
  </EmbeddedResource>
</ItemGroup>

我在哪里设置流:

string body;
using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Assets/loyalty-template.html"))
   {
       TextReader tr = new StreamReader(stream);
       body = tr.ReadToEnd();
   }

我在GetManifestResourceStream 中正确引用了嵌入文件吗?下面是loyalty-template.html所在项目的文件结构:

【问题讨论】:

  • 调用 GetManifestResourceNames 以查明资源是否存在以及使用的名称。
  • 将文件设置为复制到输出目录然后File.ReadAllText(Path.Combine("Assets", "loyalty-template.html"));不是更容易吗?
  • 应该是{ProjectDefaultNamespace}.Assets.{filename},即命名空间+分隔路径

标签: c# asp.net-core embedded-resource


【解决方案1】:

使用以下路径:[程序集名称].[目录].[文件名]。

仅使用带有文件名和扩展名的 GetManifestResourceNames:

string resourceName = assembly.GetManifestResourceNames()
.Single(str => str.EndsWith("loyalty-template.html")); 

【讨论】:

  • 我已经尝试过了。但是它仍然找不到资源? var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("The-Food-Works-WebAPI.Assets.loyalty-template.html")
  • 这似乎是一条好路。应该可以工作了。
  • 您尝试过以下方法吗? string resourceName = assembly.GetManifestResourceNames().Single(str =&gt; str.EndsWith("loyalty-template.html"));
  • 非常感谢。这成功了。请用此评论更新您的答案并投反对票!
  • 感谢@SeventhWarhawk 的支持!我很乐意提供帮助;)
猜你喜欢
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2013-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-31
相关资源
最近更新 更多