从 Visual Studio 2013 年的 Properties.Resources 获取流

Get Stream from Properties.Resources in Visual Studio 2013

我已经看到很多关于此的帖子,但无法正常工作。我在项目的资源文件夹中添加了一个文件(右键单击项目->属性->资源,然后 select 文件,添加文件)。

我尝试将构建操作设置为资源和嵌入式资源。

我需要使用 StreamReader 读取该文件。

我尝试了以下操作,但无论我将构建操作设置为资源还是嵌入式资源,myStream 的 return 均为 NULL:

    // IF I ADD FILE AS SUGGESTED BELOW IN UPDATE, THIS WILL WORK; OTHERWISE, I GET NULL   
    Stream myStream = Assembly
      .GetExecutingAssembly()
      .GetManifestResourceStream("MyProject.General.Tests.mytestfile.csv"); //returns NULL
    using (CsvReader csv = new CsvReader(new StreamReader(myStream), true)
    {
       ... 
    }

我也试过这个但是它也是 returns NULL

Stream myStream = Assembly
  .GetExecutingAssembly()
  .GetManifestResourceStream(Properties.Resources.mytestfile); //returns NULL
using (CsvReader csv = new CsvReader(new StreamReader(myStream), true)
{
   ...
}

如果我快速查看并输入此 Properties.Resources.mytestfile,我会得到我的文件的字符串表示。

更新,而不是通过右键单击项目->属性->资源来添加文件(这样,它将不起作用),而是通过右键单击项目来添加它-> 添加-> 现有项目,然后设置构建操作=嵌入式资源,它会工作。 (感谢 Aedvald Tseh 的详细回答帮助我解决了这个问题)

将您的 csv 文件作为嵌入资源添加到工作室项目中。

使用 visual studio 项目的默认命名空间作为文件名的前缀。这样"mytestfile.csv"就变成了"ConsoleApp1.mytestfile.csv"。 然后你可以这样阅读内容:

System.IO.Stream myStream = System.Reflection.Assembly.GetExecutingAssembly().GetManifestResourceStream("ConsoleApp1.mytestfile.csv");