Получение исключения NullReferenceException при использовании опции dotnet run —project

#.net #visual-studio #command-line-interface #dbup

#.net #visual-studio #интерфейс командной строки #dbup

Вопрос:

Я пытаюсь запустить свой файл проекта, используя dotnet run --project синтаксис, но получаю исключение NullReferenceException, как показано на рисунке:

 Unhandled Exception: System.NullReferenceException: Object reference not set to an instance of an object.
   at DbUp.Engine.UpgradeEngine.PerformUpgrade()
  

Вот мой основной:

 static int Main()
{
    var connectionString =
        "Data Source=.;"  
        "Initial Catalog=MyTable;"  
        "User id=SA;"  
        "Password=<mypasswordhere>;";

    var upgrader =
        DeployChanges.To
            .SqlDatabase(connectionString)
            .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly())
            .LogToConsole()
            .Build();

    var result = upgrader.PerformUpgrade();

    if (!result.Successful)
    {
        Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(result.Error);
        Console.ResetColor();
        return -1;
    }

    Console.ForegroundColor = ConsoleColor.Green;
    Console.WriteLine("Success!");
    Console.ResetColor();
    return 0;
}
  

Использование Console.WriteLine(upgrader) выводит DbUp.Engine.UpgradeEngine экземпляр на консоль.

Я использую пакеты dbup-core и dbup-sqlserver. Я предполагаю, что это проблема с зависимостями, потому что, если я запускаю в Visual Studio, все работает нормально.

Это команда, которую я использую в Powershell:

 dotnet run --project <full path to my .csproj file>
  

Комментарии:

1. Действительно ли трассировка стека имеет глубину только один уровень (не включая ваш собственный код)? В большинстве случаев код, который выдает a NullReferenceException , содержит ошибку. Предполагалось, что что-то не было null, когда на самом деле это было null. Однако это может быть просто «неаккуратная» проверка аргументов, но единственным аргументом, который вы предоставляете, который может быть нулевым, является Assembly.GetExecutingAssembly() . Вы должны проверить это непосредственно в своем коде, чтобы исключить такую возможность, а затем связаться с автором PerformUpgrade .

2. попробуйте выполнить dotnet restore перед запуском проекта

3. @MartinLiversage Нет, однако остальное просто указывает на имя моего проекта.

4. @PavelAnikhouski Нет, к сожалению, это не сработало

5. @MartinLiversage Кажется, что Assembly.GetExecutingAssembly() здесь проблема. Странно, что все работает нормально, однако при отладке в Visual Studio

Ответ №1:

Для всех остальных понижение до DBUp 4.2.0 устранило проблему для меня

Комментарии:

1. Я обнаружил ту же или подобную ошибку с dbup-sqlite. Понижение рейтинга только что привело к ошибке о том, что библиотека DLL sqlite не найдена. Фактическая проблема была связана с отсутствием ссылки на Microsoft.Data.Sqlite nuget в моей сборке. Похоже, что DbUp может быть не самым лучшим при проверке / составлении отчетов об ошибках.

Ответ №2:

DbUp, похоже, устранил проблему в версии 4.5.0. Поэтому обновление dbup-sqlserver до этой версии также может исправить исключение.