Festlegen des Basispfads mit ConfigurationBuilder


89

Ich versuche, den Basispfad der Anwendung für eine von mir erstellte .NET-Webanwendung festzulegen. Ich bekomme immer wieder Fehler im Configuration Builder. Dies ist der Fehler, den ich bekomme.

DNX,Version=v4.5.1 error CS1061: 'ConfigurationBuilder' does not contain a definition for 'SetBasePath' and no extension method 'SetBasePath' accepting a first argument of type 'ConfigurationBuilder' could be found (are you missing a using directive or an assembly reference?)

Ich gehe davon aus, dass ich den gleichen Fehler für mein .AddJsonFile()und bekomme .AddEnvironmentVariables(). Habe ich etwas falsch gemacht? Habe ich meiner project.json nicht die richtige Abhängigkeit hinzugefügt? Ich habe meine startup.cs und meine project.json beigefügt.

project.json

{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"tooling": {
"defaultNamespace": "TripPlanner"
},

"dependencies": {
  "Microsoft.AspNet.StaticFiles":  "1.0.0-rc1-final",
  "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
  "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
  "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
  "Microsoft.Framework.Configuration": "1.0.0-beta8",
  "Microsoft.Framework.DependencyInjection": "1.0.0-beta8"
  //"Microsoft.Extensions.PlatformAbstractions": "1.0.0-beta8"
},

"commands": {
  "web": "Microsoft.AspNet.Server.Kestrel"
},

"frameworks": {
  "dnx451": { },
  "dnxcore50": { }
},

"exclude": [
  "wwwroot",
  "node_modules"
],
"publishExclude": [
  "**.user",
  "**.vspscc"
 ]
}

startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.PlatformAbstractions;
using Microsoft.Framework.Configuration;
using Microsoft.Framework.DependencyInjection;
using TripPlanner.Services;



namespace TripPlanner
{
  public class Startup
  {
    public static IConfigurationRoot Configuration;

    public Startup(IApplicationEnvironment appEnv){
        var builder = new ConfigurationBuilder()
            .SetBasePath(appEnv.ApplicationBasePath)
            .AddJsonFile("config.json")
            .AddEnvironmentVariables();

        Configuration = builder.Build();
    }

    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection services)
    {
        services.AddMvc();
        #if DEBUG
        services.AddScoped<IMailService, DebugMailService> ();
        #else
        services.AddScoped<IMailService, RealMailService> ();
        #endif
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
       //app.UseDefaultFiles();
       app.UseStaticFiles();
       app.UseMvc(config =>
       {
           config.MapRoute(
               name: "Default",
               template: "{controller}/{action}/{id?}",
               defaults: new { controller  = "App", action = "Index"}
           );
       });

    }

    // Entry point for the application.
    public static void Main(string[] args) => Microsoft.AspNet.Hosting.WebApplication.Run<Startup>(args);
  }
}

Der Fehler liegt in der public startupFunktion ganz oben in startup.cs.

Antworten:


172

Ich konnte das Problem lösen. Wenn Sie es noch nicht gelöst haben, versuchen Sie Folgendes in der Datei project.json. Fügen Sie Folgendes hinzu:

"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final"

und es sollte funktionieren


Wie geht das in EF Core 2.0, da es jetzt keine project.json-Datei gibt?
ATHER

3
@ATHER: Fügen Sie die beiden Nugets genauso hinzu wie alle anderen Nugets.
Dejan

5
@ATHER dotnet add package <packageName>wo packageName in diesem Fall ist Microsoft.Extensions.Configuration.FileExtensions, oder in Visual Studio Nuget-Paket hinzufügen
William Ardila

46

Ich bin mir nicht sicher, ob noch jemand auf dieses Problem stößt, aber ich konnte dies in einem Dotnetcore-Konsolenprojekt (netcoreapp2.0) beheben über:

dotnet add package Microsoft.Extensions.Configuration.Json

1
Danke @bishop. Das Hinzufügen in meiner .net-Kernbibliothek löste mein Problem.
Wallace B. McClure

Ja, die Installation .Jsonüber NuGet funktioniert auch.
James Hirschorn

6

Fügen Sie Ihrer .csprojDatei Folgendes hinzu :

<ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.2.0" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
</ItemGroup>

Microsoft.Extensions.Configuration.FileExtensions und Microsoft.Extensions.Configuration.Json sind genau die Pakete, die fehlen.
Ognyan Dimitrov

3

Wenn Sie .NET Core 1.x oder .NET Standard 1.x ausführen, sollten Sie diesen Befehl ausführen:

dotnet add package Microsoft.Extensions.Configuration.Json -v 1.1.1

Wenn sich Ihr Projekt in einem anderen Ordner befindet:

dotnet add .\src\MyProject package Microsoft.Extensions.Configuration.Json -v 1.1.1

... wobei MyProject der Name der .csprojDatei ist.


2

Fügen Sie Ihrem project.json Folgendes hinzu:

"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*"

2

Fügen Sie Ihren project.json-Abhängigkeiten Folgendes hinzu: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

Oder in project.csproj:
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1" />

Das hat bei mir funktioniert.


2

Nur noch ein mögliches Problem ...

Ich musste Folgendes hinzufügen:

<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0" />

damit dies kompiliert werden kann:

var builder = new ConfigurationBuilder()
  .SetBasePath(Directory.GetCurrentDirectory())
  ...

Bearbeiten: Ich habe diese Antwort vor einigen Monaten geschrieben, bin mir aber ziemlich sicher, dass es sich um eine Konsolen-App handelt.


1
Lief wie am Schnürchen!
Daniel Cohen

1

Fügen Sie Ihren project.json-Abhängigkeiten Folgendes hinzu:

"Microsoft.Extensions.Configuration": "1.0.0-*",
"Microsoft.Extensions.Configuration.Abstractions": "1.0.0-*",

Danke für den Vorschlag! Ich habe versucht, beide zur project.json hinzuzufügen und dann eine "dnu-Wiederherstellung" durchgeführt. Aber ich bekomme immer noch den gleichen Fehler in meiner Startup.cs. Irgendwelche anderen Ideen? Ich habe die Dokumentation für die genaue Funktion gefunden, die ich hier verwende . SetBasePath()
Currymanswag

0

Vergessen Sie außerdem nicht, die Eigenschaft "In Ausgabeverzeichnis kopieren" im Eigenschaftenfenster auf "Immer kopieren" der Json-Datei zu setzen.


0

Noch etwas zu beachten:

using Microsoft.Extensions.Configuration;

Ohne diese Anweisung "using" wird die Erweiterungsmethode in Microsoft.Extensions.Configuration.FileExtensions nicht gefunden.

Das Problem trat für mich auf, weil wir auch:

using System.Configuration;

Und es gab einen Namenskonflikt mit "ConfigurationBuilder". Ergänzen Sie die

using Microsoft.Extensions.Configuration;

Linie ... entfernen Sie die

using System.Configuration;

Zeile, dann qualifizieren Sie alles unter System.Configuration.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.