Подтвердить что ты не робот

ASP.NET Core 1.0 ConfigurationBuilder(). AddJsonFile ( "appsettings.json" ); не найти файл

Итак, я наконец обернулся, посмотрев на Core, и я упал на первое препятствие. Я следую за курсом Pluralsight ASP.NET Core Fundamentals, и я получаю исключение при попытке добавить файл appsettings.json в конструктор конфигурации.

public Startup()
{
    var builder = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json");

    Configuration = builder.Build();
}

Ошибка, которую я получаю, - это файл конфигурации 'appsettings.json' не найден и не является необязательным. Но я создал прямо под моим решением, как в видео курса.

Любые предложения?

Приветствия,

4b9b3361

Ответ 1

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json");

    Configuration = builder.Build();
}

Это похоже на трюк. Однако не уверен, что это правильный способ сделать это. Kinda чувствует себя как хак.

Ответ 2

Вам нужно добавить пакет ниже:

    "Microsoft.Extensions.Configuration.Json": "1.0.0"

Ответ 3

Другой способ:

appsettings.json:

{
    "greeting": "A configurable hello, to you!"
}

Startup.cs:

using Microsoft.Extensions.Configuration; // for using IConfiguration
using System.IO; // for using Directory

public class Startup
{
    public IConfiguration Configuration { get; set; }

    public Startup()
    {
        var builder = new ConfigurationBuilder();
        builder.SetBasePath(Directory.GetCurrentDirectory());
        builder.AddJsonFile("appsettings.json");

        Configuration = builder.Build();
    }    
}

В методе Configure:

app.Run(async (context) =>
{
    // Don't use:
    // string greeting = Configuration["greeting"]; // null

    string greeting = Configuration.GetSection("greeting").Value;
    await context.Response.WriteAsync(greeting)
});

Ответ 4

Альтернативное решение, которое я нашел из этого сообщения в блоге, также работает. У этого есть дополнительное преимущество, не нуждающееся в том, чтобы изменить подпись Startup.cs файла для запуска.

В разделе buildOptions добавьте copyToOutput с именем файла.

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "copyToOutput": "appsettings.json"
  },
  .... The rest of the file goes here ....

Ответ 5

На самом деле для этого вам нужно IHostingEnvironment корневой путь из переменной среды, поэтому вам нужно передать ссылку IHostingEnvironment чтобы указать корневой путь:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
                          .SetBasePath(env.ContentRootPath)
                          .AddJsonFile("appsettings.json");
    Configuration = builder.Build();
}

и если вы не можете найти метод AddJsonFile, то вы должны добавить, using Microsoft.Extensions.Configuration.Json;

Ответ 6

В .NET Core 2.0 вы должны обновить файл .csproj, чтобы скопировать файл JSON в выходной каталог, чтобы к нему можно было получить доступ, например:

<ItemGroup>
    <Folder Include="wwwroot\" />
    <None Include="appsettings.json" CopyToOutputDirectory="Always" />
</ItemGroup>

Ответ 7

Щелкните правой кнопкой мыши appsettings.json → Свойства, а затем убедитесь, что для параметра Копировать в выходной каталог установлено значение "Всегда копировать".

Ответ 8

Ответы, которые предполагают добавление .SetBasePath(env.ContentRootPath) в Startup.cs, зависят от предыдущего шага.

Сначала добавьте строку .UseContentRoot(Directory.GetCurrentDirectory()) в вашу конструкцию WebHostBuilder в Program.cs так:

public class Program
{
    public static void Main(string[] args)
    {
        var config = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddEnvironmentVariables()
            .Build();

        var host = new WebHostBuilder()
            .UseConfiguration(config)
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}

Тогда будет работать следующее:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json");

    Configuration = builder.Build();
}

Ответ 9

Если вы что-то сделали с помощью свойств проекта Debug Properties, вы можете случайно перезаписать стартовый каталог:

Project -> Right-click -> Properties -> Debug -> Profile, а затем просмотрите запись в Working Directory.

Простейшим является то, что оно пустое.

Ответ 10

Вам нужно установить пакет Configuration.Json из Microsoft.Extensions или просто добавить Microsoft.Extensions.Configuration.Json к вам.