#.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
до этой версии также может исправить исключение.