2017-02-15 4 views
0

Я пытаюсь запустить скрипт для чтения значений из листа 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; 
     } 
    } 
} 
+2

отладчик в VS2015 является дрянным мешком «о ошибках, это не позволит вам взглянуть на InnerException. Используйте Сервис> параметры> Debugging> General> галочку„использовать управляемый режим совместимости“, и теперь вы можете увидеть осторожно с этими статиками, их инициализатор может байт вас в заднем конце плохо. –

+0

@HansPassant Я проверю это, когда я g и т. д. Можете ли вы разработать или опубликовать «ответ» в отношении предупреждения о статике, которое вы упомянули? –

+0

Я не знаю ответа. Я бы предположил, что в NullReferenceException, поскольку '_excelFile' по-прежнему имеет значение null, вы можете получить факт, используя рекомендованную мной настройку отладчика. –

ответ

1

Таким образом, оказывается, что проблема смотрела мне в лицо, я прошел через следующие шаги, предоставляемые Ханса Passant в комментариях выпуска:

«Отладчик в VS2015 - это дерьмовая сумка», это не позволит вам посмотреть на InnerException. Используйте «Инструменты»> «Параметры»> «Отладка»> «Общие»> « » «Использовать режим совместимой совместимости», и теперь вы можете его увидеть. Тщательное с этими статики, их инициализатор может байтовой на заднем конце плохо.»

Это была пустая ссылка исключение, вызванное мной объявляя первенствовать файл с пути аргумента, которые еще должны быть объявлены себя.

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"); 
Смежные вопросы