为什么GetManifestResourceStream()返回null?

时间:2016-09-11 12:24:57

标签: c# visual-studio console

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

命名空间为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&我看不出我做错了什么......

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

项目由许多文件组成,Visual Studio允许您通过 Build Action 属性选择每个文件的内容。

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

另一种可能的构建操作嵌入式资源选项。这指示构建系统获取任何文件(无论其内容如何)并将其作为二进制blob嵌入到生成的程序集文件中的某处。如果您打算使用GetManifestResourceStream()方法访问文件,则可以使用 Build Action 来执行此操作。

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