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é,
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.
Vous devez ajouter le package ci-dessous:
"Microsoft.Extensions.Configuration.Json": "1.0.0"
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)
});
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 ....
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;
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>
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();
}
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".
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.