嵌入式资源文件在运行时.Net 4不存在

本文关键字:Net 不存在 运行时 资源 源文件 嵌入式 | 更新日期: 2023-09-27 18:21:21

我有一个文件需要在运行时访问,我已经将它包含在我的项目中,并将其设置为嵌入式资源(它实际上是一个源文件,我将扩展名更改为.cs.txt,以绕过VS试图编译它。这应该没关系,但我无论如何都会提到它,以防万一)。当我尝试获取文件时

var assembly = Assembly.GetExecutingAssembly();
Stream stream = assembly.GetManifestResourceStream(resourceName);

我得到一个null。我已经确定我使用了Namespace.Folder.Filename表示法,但这并没有帮助。看起来文件实际上不在那里,因为当我调用时

assembly.GetManifestResourceNames();

我得到一个空字符串数组。你知道会是什么情况吗?

嵌入式资源文件在运行时.Net 4不存在

我很感激这是一个老话题,但我今天早上发现的可能对其他人有用。

我有一个资源,文件名中有多个点…

示例文件名:data.txt.dat

var resources = asm.GetManifestResourceNames(); // None found (empty array)

重命名为data.txt(仍然只是项目配置中的嵌入资源

var resources = asm.GetManifestResourceNames(); // Entry found ("Assembly.Namespace.data.txt")

所以倍数可能有一些限制。名称中的字符

所以我使用VS资源管理器解决了这个问题。现在我可以直接访问文件如下:

MyNamespace.Properties.Resources.MyFile

我向任何人推荐这种方法,因为它看起来不仅更清洁,而且更安全。感谢Hans Passant的建议。

基于此拉取请求(https://github.com/dotnet/msbuild/pull/5824)您可以在EmbeddedResource标记上的csproj中添加WithCulture="false"

<EmbeddedResource Include="a.cs.b" WithCulture="false"/>

它对我有效