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.

Currymanswag
quelle

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

Fouad Zakka
quelle
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
Bischof
quelle
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>
Vijay Shaaruck
quelle
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.

Alisson
quelle
2

Fügen Sie Ihrem project.json Folgendes hinzu:

"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*"
Dudu
quelle
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.

Pritesh Dhokchaule
quelle
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.

Quelle
quelle
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-*",
Brett Christensen
quelle
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.

emert117
quelle
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.

Chad Lehman
quelle