it-swarm.com.de

ASP.NET Core 1.0 ConfigurationBuilder (). AddJsonFile ("appsettings.json"); Datei wird nicht gefunden

So habe ich endlich den Core angeschaut und bin an die erste Hürde gestoßen. Ich folge dem Pluralsight ASP.NET Core-Grundlagenkurs und bekomme eine Ausnahme, wenn Sie versuchen, die Datei appsettings.json zum Konfigurations-Builder hinzuzufügen.

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

    Configuration = builder.Build();
}

Die Fehlermeldung, die ich bekomme, ist Die Konfigurationsdatei 'appsettings.json' wurde nicht gefunden und ist nicht optional. Aber ich habe das direkt unter meiner Lösung genauso erstellt wie im Kursvideo.

Irgendwelche Vorschläge?

Prost,

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

    Configuration = builder.Build();
}

Dies scheint den Trick zu tun. Unsicher ist dies jedoch der richtige Weg. Ein bisschen fühlt sich an wie ein Hack.

21
Zhorian

Sie müssen das Paket unten hinzufügen:

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

Ein anderer Weg:

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

In der Configure-Methode:

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

Eine alternative Lösung, die ich in diesem Blogpost gefunden habe, funktioniert ebenfalls. Es hat den zusätzlichen Vorteil, dass die Signatur der Startup-Methode der Datei Startup.cs nicht geändert werden muss.

Fügen Sie im Abschnitt buildOptions den Namen der Datei mit copyToOutput hinzu.

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

Eigentlich müssen Sie dazu den Root-Pfad aus Ihrer Umgebungsvariablen bereitstellen, sodass Sie die IHostingEnvironment-Referenz übergeben müssen, um den Root-Pfad bereitzustellen:

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

und wenn Sie die AddJsonFile-Methode nicht finden können, müssen Sie using Microsoft.Extensions.Configuration.Json; hinzufügen.

6
bhatt ravii

In .NET Core 2.0 würden Sie die .csproj-Datei aktualisieren, um die JSON-Datei in das Ausgabeverzeichnis zu kopieren, damit auf sie zugegriffen werden kann.

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

Die Antworten, die das Hinzufügen von .SetBasePath(env.ContentRootPath) in Startup.cs vorschlagen, hängen von einem vorherigen Schritt ab.

Zuerst , füge die Zeile .UseContentRoot(Directory.GetCurrentDirectory()) zu deiner WebHostBuilder-Konstruktion in Program.cs hinzu:

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

Dann Folgendes wird funktionieren:

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

    Configuration = builder.Build();
}
1
Groppe

Klicken Sie mit der rechten Maustaste auf appsettings.json -> Eigenschaften und stellen Sie sicher, dass die Option In Ausgabeverzeichnis kopieren auf "Immer kopieren" gesetzt ist.

1
user3413723

Sie müssen das Configuration.Json-Paket von Microsoft.Extensions .___ installieren oder einfach Microsoft.Extensions.Configuration.Json zu y hinzufügen

Wenn Sie etwas mit Project Debug Properties gemacht haben, haben Sie möglicherweise das Startverzeichnis unbeabsichtigt überschrieben:

Project -> Right-click -> Properties -> Debug -> Profile und schauen Sie sich dann den Eintrag in Working Directory an. 

Das einfachste ist, dass es leer ist.

0
Chris F Carroll