Не удается найти файл appsettings. json в главной функции? - PullRequest
1 голос
/ 05 апреля 2020

Я пытаюсь получить доступ к appsettings.json из метода Main и перейти к DBContext, чтобы получить строку подключения. Но на Configuration = builder.Build(); ошибка. Есть ли какой-нибудь альтернативный способ, которым я могу попытаться получить строку подключения?

System.IO.FileNotFoundException: 'The configuration file 'appsettings.json' was not found and is not optional.  
The physical path is 'C:\Trunk\Repos\ZiplinePackage\bin\Debug\netcoreapp3.1\appsettings.json'.'

Program.cs

class Program
{
    public static IConfigurationRoot Configuration { get; set; }
    static void Main(string[] args)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json");

        Configuration = builder.Build();
        var context = new DataContext(Configuration);
        var speCommonData = context.SpeCommonData.Where(s => s.Status == "NLM GENERATED").ToList();
    }
}

enter image description here

DataContext.CS file

public class DataContext : DbContext
{

    public DataContext(IConfiguration configuration)
    {
        configuration = configuration;
    }
    public DataContext(DbContextOptions<DataContext> options)
        : base(options)
    {
    }
    private string _connectionString;
    public static IConfigurationRoot configuration;

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        if (!optionsBuilder.IsConfigured)
        {
           optionsBuilder.UseSqlServer(configuration.GetConnectionString("MISCDBConnection"));
        }

    }

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Ваше приложение не может найти файл, когда оно работает. Это означает, что файл не был включен в сборку. Убедитесь, что appsettings.json имеет следующие свойства:

  • Действие построения = Содержимое
  • Копировать в каталог вывода = Копировать, если новее

enter image description here

1 голос
/ 05 апреля 2020

Удалить SetBasePath метод

var builder = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", true, true)
            .Build();

или установить базовый путь как этот

string basePath = Directory.GetParent(Environment.CurrentDirectory).Parent.Parent.FullName;
var builder = new ConfigurationBuilder()
            .SetBasePath(basePath)
            .AddJsonFile("appsettings.json")
            .Build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...