我有一个简单的控制台项目,我正在尝试访问项目根目录中的资源。
命名空间为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&我看不出我做错了什么......
有人可以帮忙吗?
答案 0 :(得分:1)
项目由许多文件组成,Visual Studio允许您通过 Build Action 属性选择每个文件的内容。
在您的情况下,Program.cs
文件将 Build Action 设置为 Compile 。这指示构建系统将文件作为包含C#代码的源文件提供给C#编译器。
另一种可能的构建操作是嵌入式资源选项。这指示构建系统获取任何文件(无论其内容如何)并将其作为二进制blob嵌入到生成的程序集文件中的某处。如果您打算使用GetManifestResourceStream()
方法访问文件,则可以使用 Build Action 来执行此操作。
现在,如果您希望您的文件 编译为源文件和嵌入作为程序集中的资源,我不知道构建系统是否提供任何为两个文件组合两个选项的选项。作为解决方法,您可以创建文件的副本,并将其中一个副本设置为 Compile ,将其中一个副本设置为 Embedded Resource 。请注意,找到一种自动执行此复制任务的方法可能是个好主意,否则您最终可能会发现实际上不同步的重复文件。