Я пытаюсь запустить скрипт для чтения значений из листа Excel с помощью EPPlus
и загрузить их в список кортежей. Однако, когда я бегу сценарий я получаю две ошибки, первое:TypeInitializationException с сценарием EPPlus
An unhandled exception of type 'System.TypeInitializationException' occurred in mscorlib.dll
я видел в других постах, что мне нужно, чтобы проверить на внутреннее исключение, однако никто не предлагает Visual Studio 15. Это все детали исключения, которые доступны.
System.TypeInitializationException was unhandled
Message: An unhandled exception of type 'System.TypeInitializationException' occurred in mscorlib.dll
Additional information: The type initializer for 'CGCompare2.Program' threw an exception.
Затем, когда я закрываю окно VS15 исключения я получаю всплывающий диалог:
Cannot access a disposed object.
Object name: 'HwndSourceAdapter'
Я не уверен, что проблема есть, если это вызвано мой код или нет. Любая помощь, очень ценится.
Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using OfficeOpenXml;
namespace CGComparer
{
class Program
{
private static List<Tuple<string, string>> _listTop;
private static List<Tuple<string, string>> _listGNED;
private static Base _baseCell;
private static ExcelPackage _package = new ExcelPackage(new FileInfo(_excelFile));
private static string _excelFile = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),
"Compare GNED and TOP V1.0.xlsx");
static void Main(string[] args)
{
_baseCell = new Base(1, 2);
_listTop = ColumnsToList(_baseCell.Column(),_baseCell.Row());
_baseCell = new Base(3, 2);
_listGNED = ColumnsToList(_baseCell.Column(),_baseCell.Row());
}
public static List<Tuple<string, string>> ColumnsToList(int column, int row)
{
var list = new List<Tuple<string, string>>();
var ws = _package.Workbook.Worksheets[1];
var ListIsValid = true;
do
{
var userEmail = (string)ws.Cells[column, row].Value;
var customerGroup = (string)ws.Cells[column + 1, row].Value;
if (!string.IsNullOrEmpty(userEmail))
{
list.Add(new Tuple<string, string>(userEmail, customerGroup));
row = row++;
}
else
{
ListIsValid = false;
}
} while (ListIsValid);
return list;
}
}
}
Base.cs
namespace CGComparer
{
public class Base
{
private static int _column;
private static int _row;
public Base(int column, int row)
{
_column = column;
_row = row;
}
public int Column()
{
return _column;
}
public int Row()
{
return _row;
}
}
}
отладчик в VS2015 является дрянным мешком «о ошибках, это не позволит вам взглянуть на InnerException. Используйте Сервис> параметры> Debugging> General> галочку„использовать управляемый режим совместимости“, и теперь вы можете увидеть осторожно с этими статиками, их инициализатор может байт вас в заднем конце плохо. –
@HansPassant Я проверю это, когда я g и т. д. Можете ли вы разработать или опубликовать «ответ» в отношении предупреждения о статике, которое вы упомянули? –
Я не знаю ответа. Я бы предположил, что в NullReferenceException, поскольку '_excelFile' по-прежнему имеет значение null, вы можете получить факт, используя рекомендованную мной настройку отладчика. –