为什么GetManifestResourceStream()返回null ?

本文关键字:null 返回 GetManifestResourceStream 为什么 | 更新日期: 2023-09-27 18:06:28

我有一个简单的控制台项目,我试图访问项目根目录中的资源。

名称空间是Names.Console,我试图访问的文件是Program.cs

我的代码是:

var assembly = Assembly.GetExecutingAssembly();
const string resourceName = "Names.Console.Program.cs"
var stream = assembly.GetManifestResourceStream(resourceName));
// more code

当我在流声明后设置休息时,stream是空的,但我不知道为什么?

我一直在寻找一些关于如何做到这一点的资源,例如:https://support.microsoft.com/en-gb/kb/319292 &我不知道我做错了什么…

有人能帮忙吗?

为什么GetManifestResourceStream()返回null ?

一个项目由许多文件组成,Visual Studio允许您通过其Build Action属性来选择每个文件发生什么。

在您的情况下,Program.cs文件将构建操作设置为编译。这指示构建系统将该文件作为包含c#代码的源文件提供给c#编译器。

另一个可能的Build ActionEmbedded Resource选项。这指示构建系统获取任何文件(无论其内容如何),并将其作为二进制blob嵌入到生成的程序集文件的某个位置。如果您打算使用GetManifestResourceStream()方法访问一个文件,这是构建操作,使您能够做到这一点。

现在,如果您希望文件既作为源文件编译,又作为程序集中的资源嵌入,我不知道构建系统是否提供了将两个选项组合为单个文件的任何选项。作为一种解决方法,您可以创建文件的副本,并将其中一个副本设置为Compile,并将其中一个副本设置为Embedded Resource。请注意,找到一种方法来自动执行此复制任务可能是一个好主意,否则您可能最终会得到所谓的复制文件,但实际上是不同步的。