web-dev-qa-db-fra.com

ASP.NET Core 1.0 ConfigurationBuilder (). AddJsonFile ("appsettings.json"); ne pas trouver le fichier

Je me suis donc enfin mis à regarder Core et je suis tombé au premier obstacle. Je suis le cours Principes de base de Pluralsight ASP.NET et j'obtiens une exception lorsque j'essaie d'ajouter le fichier appsettings.json au générateur de configuration.

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

    Configuration = builder.Build();
}

L'erreur que je reçois est que le fichier de configuration 'appsettings.json' n'a pas été trouvé et qu'il n'est pas facultatif. Mais j'ai créé le directement sous ma solution, tout comme dans la vidéo du cours.

Aucune suggestion?

À votre santé,

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

    Configuration = builder.Build();
}

Cela semble faire l'affaire. Cependant, vous n'êtes pas sûr que ce soit la bonne façon de le faire. Kinda se sent comme un hack.

21
Zhorian

Vous devez ajouter le package ci-dessous:

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

Autrement:

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();
    }    
}

Dans la méthode Configure:

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

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

Une solution alternative que j'ai trouvée à partir de cet article du blog fonctionne également. Il présente l'avantage supplémentaire de ne pas avoir besoin de modifier la signature de méthode de démarrage du fichier Startup.cs.

Dans la section buildOptions, ajoutez copyToOutput avec le nom du fichier.

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

En fait, pour cela, vous devez fournir un chemin racine à partir de votre variable d’environnement. Vous devez donc passer la référence IHostingEnvironment pour fournir le chemin racine:

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

et si vous ne trouvez pas la méthode AddJsonFile, vous devez ajouter using Microsoft.Extensions.Configuration.Json;

6
bhatt ravii

Dans .NET Core 2.0, vous devez mettre à jour le fichier .csproj pour le copier dans le répertoire de sortie afin de pouvoir y accéder, comme suit:

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

Les réponses suggérant l’ajout de .SetBasePath(env.ContentRootPath) dans Startup.cs dépendent d’une étape antérieure.

Premièrement , ajoutez la ligne .UseContentRoot(Directory.GetCurrentDirectory()) à votre construction WebHostBuilder dans Program.cs comme suit:

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();
    }
}

Ensuite ce qui suit fonctionnera:

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

    Configuration = builder.Build();
}
1
Groppe

Cliquez avec le bouton droit sur appsettings.json -> Propriétés, puis assurez-vous que l'option Copier dans le répertoire de sortie est définie sur "Copier toujours".

1
user3413723

Vous devez installer le package Configuration.Json à partir de Microsoft.Extensions .___.

Si vous avez déjà utilisé les propriétés de Project Debug, vous avez peut-être écrasé par inadvertance le répertoire de départ:

Project -> Right-click -> Properties -> Debug -> Profile et ensuite regarder l'entrée dans Working Directory

Le plus simple est qu'il soit vide.

0
Chris F Carroll