【问题标题】:“Microsoft.VisualBasic.FileIO does not exist”. How to include this library in my project?“Microsoft.VisualBasic.FileIO 不存在”。如何在我的项目中包含这个库?
【发布时间】:2020-05-28 00:56:30
【问题描述】:

所以我试图解析一个 .csv 文件,其中的列可能包含它们自己的逗号字符。

答案herehere 说,在不编写我自己的逐行解析器的情况下轻松处理此问题的最佳方法是使用 Microsoft.VisualBasic.FileIO 库。

不幸的是,当我尝试将其包含在我的项目中时,我遇到了常见错误:

'File.IO' does not exist in the namespace "Microsoft.VisualBasic" (are you missing an assembly reference?)

对此问题的修复herehere 都说我需要使用参考管理器将 Microsoft.VisualBasic 添加到我的项目中,但我的参考管理器没有程序集,带有框架和扩展子组选项卡official help documents 说用于将包添加到我的项目中。我在此处附上了我的参考管理器窗口的屏幕截图。 “项目”选项卡仅显示我的解决方案中所有项目的列表,“共享项目”选项卡为空白。

我还检查了是否应该包含一个 NuGet 包,但这根本没有解决问题。

【问题讨论】:

  • 您想在 C# 项目中使用 Microsoft.VisualBasic.IO 而不是 System.IO.File?
  • 我可以在VS2019的“管理Nuget包...”中添加Microsoft.VisualBasic NuGet包
  • 你的目标是 .NET Core 2.x 吗?
  • 请创建基于 .NET Framework 的项目。 .NET Core 的 VB 支持不完整。
  • yes .NET Core 2.1 我只想使用任何可行的方法,是否使用 System.IO.File 对我来说并不重要,但我没有看到任何使用建议该库或该库中的哪个调用要使用,所以我尝试使用另一个库。 System.IO.File 是否有办法读取 csv 行并处理列中的嵌入逗号?我通过 NuGet 添加了 Microsoft.VisualBasic 包,但它没有给我 .FileIO 函数,所以我假设“添加引用”的功能与 NuGet 不同。

标签: c# .net visual-studio-2019


【解决方案1】:

我找到了解决问题的方法。

首先,请将您的平台从 .net core2.1 更改为 .net core3.0 或 .net core 3.1。

其次,你可以参考下面的代码,通过使用将csv文件转换为数据表

Microsoft.VisualBasic.FileIO.

static void Main(string[] args)
        {
            DataTable table = GetDataTabletFromCSVFile("D:\\Test.csv");
        }

        private static DataTable GetDataTabletFromCSVFile(string csv_file_path)
        {
            DataTable csvData = new DataTable();
            try
            {
                using (TextFieldParser csvReader = new TextFieldParser(csv_file_path))
                {
                    csvReader.SetDelimiters(new string[] { "," });
                    csvReader.HasFieldsEnclosedInQuotes = true;
                    string[] colFields = csvReader.ReadFields();
                    foreach (string column in colFields)
                    {
                        if (column == "Name" || column == "Age" || column == "Id")
                        {
                            DataColumn datecolumn = new DataColumn(column);
                            datecolumn.AllowDBNull = true;
                            csvData.Columns.Add(datecolumn);
                        }
                    }
                    while (!csvReader.EndOfData)
                    {
                        string[] fieldData = csvReader.ReadFields();
                        for (int i = 0; i < fieldData.Length; i++)
                        {
                            if (fieldData[i] == "")
                            {
                                fieldData[i] = null;
                            }
                        }
                        csvData.Rows.Add(fieldData);
                    }
                }

            }
            catch (Exception)
            {
                throw;
            }
            return csvData;
        }

结果:

【讨论】:

    【解决方案2】:

    我最终使用了CSVHelper library,它可以很好地与 NuGet 一起安装并完美处理包含逗号的列,甚至可以配置为忽略空白行和标题。

    我不知道为什么 VisualBasic.FileIO 无法添加到我的项目中,为什么 6 多年前的最佳解决方案说要使用这个库,或者为什么我的参考管理器窗口与官方帮助所说的不同,但我解决了我的根本问题,所以希望我以后实际上不需要使用参考管理器来做任何事情。

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 1970-01-01
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-17
      • 2015-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多