Я перехожу с .NET Core 5.0 на 6.0.
Следующий фрагмент кода прекрасно работает в версии 6.0.
builder.Services.AddDbContext<QuoteCMSContext>(options =>
options.UseSqlite("Data Source=quotesdatabase.db"));
Теперь, в моем старом проекте 5.0, у меня было что-то подобное.
//database context
services.AddDbContext<QuoteCMSContext>(options =>
options.UseSqlite(Configuration["SqliteConnectionString"]));
Я посмотрел на все эти другие вопросы, которые, похоже, касаются моей проблемы.
ASP.NET Core 6, как получить доступ к конфигурации во время запуска
Получение значения из appsettings.json в ядре .net
ConnectionString в .NET Core 6
В конце концов, я придумал это.
builder.Services.AddDbContext<QuoteCMSContext>(options =>
options.UseSqlite(builder.Configuration["SQLiteConnectionString"]));
и это
builder.Services.AddDbContext<QuoteCMSContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("SQLiteConnectionString")));
в обоих случаях я продолжаю получать нулевые исключения. Я не знаю, чего мне не хватает.
Вот мой appsettings.json, на всякий случай.
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"SQLiteConnectionString": "Data Source=quotesdatabase.db",
"AzureSqlServerConnectionString": "Server=tcp:.database.windows.net,1433;Initial Catalog=DBName;Persist Security Info=False;User ID=;Password=;MultipleActiveResultSets=False;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;",
"CorsOriginLocalHost": "http://localhost:3000",
"CorsOriginStaging": "https://randomstuffreactjsappzeropoint4.azurewebsites.net",
"CorsOriginProduction": "https://randomstuffreactjsappzeropoint4.azurewebsites.net",
"ConnectionStrings": {
"SQLiteConnectionString": "Data Source=quotesdatabase.db"
}
}
Обновление 1:
Я заметил нечто странное. Следующий код не вызывает ошибок. На самом деле, извините, я еще не вводил cors в свой код. Это также дает ту же нулевую ошибку. Итак, да, на данный момент определенно не в состоянии прочитать информацию из appsettings.json
builder.Services.AddCors(cors =>
{
cors.AddDefaultPolicy( policy =>
{
policy.WithOrigins(builder.Configuration["CorsOriginLocalHost"],
builder.Configuration["CorsOriginStaging"],
builder.Configuration["CorsOriginProduction"]);
//policy.WithOrigins("http://localhost:3000",
// "http://localhost:3000"
// );
policy.AllowAnyMethod();
policy.AllowAnyHeader();
policy.AllowCredentials();
}
);
}
);
Обновление 2:
Хорошо, я нашел проблему. Я изменил «Рабочий каталог» во время отладки SQLite. Таким образом, код продолжал искать файл appsettings.json не в том месте. Я установил папку проекта вручную. Раньше я делал этот шаг в .NET 5.0.
Похоже, это не требуется в .NET 6.0.
Я вернулся к свойствам проекта и удалил путь, который я установил. сделал его пустым. Теперь можно читать appsettings.json.
1. appsettings.json настроен на копирование для вывода. 2. Просто запускаю как обычно. шаблон проекта dot net core по умолчанию. Я ничего не модифицировал.
Похоже, ответ принят. Можете ли вы сообщить нам, как проблема была решена?
В итоге я использовал комбинацию моего обновления 2 выше в моем вопросе и ответа, опубликованного ниже, в качестве окончательного решения :)
"ConnectionStrings": {
"ToDoItemsDatabase": "Server=JOHANDRE\\SQL2017; Database=ToDoItems; User=xxx; Password=xxx;"
},
как показано в ConnectionString в .NET Core 6
действительно отличается от этого:
"SQLiteConnectionString": "Data Source=quotesdatabase.db"
Попробуйте использовать это в своем appsettings.json:
"ConnectionStrings": {
"SQLiteConnectionString": "Data Source=quotesdatabase.db"
}
Это не имело значения. Я не знаю, в чем проблема. Почему Microsoft постоянно меняет вещи, которые работают с каждой версией, мне не понятно :(
В моем тесте я получил строку подключения с помощью builder.Configuration.GetConnectionString("SQLiteConnectionString")
, поэтому вам потребуется некоторая отладка, чтобы увидеть, какой следующий шаг не работает.
Ну, я обновил свой вопрос с дополнительными подробностями. Я начинаю думать, что это может быть проблемой только с SQLite. Я могу прочитать настройки приложения для других служб. Я также отчетливо помню, как использовал этот код на прошлой неделе с сервером SQL Azure.
Так что нет, дело не только в SQLite. Я также не могу читать из других полей.
эта проблема не имеет ничего общего с настройкой чтения из appsettings.json
. Вы могли бы проверить это, проверив значения, возвращенные из builder.Configuration.GetDebugView()
(см.: GetDebugView)
Да, значения appsettings.json определенно не загружаются и не отображаются в представлении отладки. Я не понимаю, что я делаю неправильно :(
Можете ли вы предоставить дополнительную информацию о том, как вы запускаете приложение. Также проверьте в опубликованной папке, скопирован ли файл appsettings или нет?