嵌入式资源文件在运行时.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();
我得到一个空字符串数组。你知道会是什么情况吗?
我很感激这是一个老话题,但我今天早上发现的可能对其他人有用。
我有一个资源,文件名中有多个点…
示例文件名: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"/>
它对我有效