Я начинаю новый проект с другом, я буду использовать Windows, и он работает на MacOS.
В проекте используется EntityFrameworkCore, и я настраиваю строку подключения следующим образом (внутри класса контекста):
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
optionsBuilder.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
base.OnConfiguring(optionsBuilder);
}
configuration
- это внедренный сервис типа IConfiguration
.
В Windows это работает отлично, но Mac не может сказать, что не может использовать "нуль "как значение.GetConnectionString
действительно возвращает ноль для Mac.
Я нашел много мест, где говорилось, что мне нужно использовать UseContentRoot
в программе .cs:
public static void Main(string[] args)
{
WebHost.CreateDefaultBuilder(args)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build()
.Run();
}
Но это не работаетна Mac в любом случае.
Кроме того, в macOS Directory.GetCurrentDirectory()
вернет <ProjectRoot>/bin/debug/net462
и Windows вернет <ProjectRoot>
.
Так что я предполагаю, что он не находит appsettings.json
внутри этогопуть и, следовательно, он терпит неудачу.
Я также проверил, могу ли я получить доступ к wwwroot, и я не могу.Всегда используется bin
вместо корня проекта.
Есть идеи, как это исправить?
Спасибо.
PS
Отличается от вопроса, помеченного как «дубликат из»:
Там он не использует UseContentRoot и IConfiguration для получения> connectionString.Я видел это, и это не работает