Impostazione del percorso di base utilizzando ConfigurationBuilder


90

Sto cercando di impostare il percorso di base dell'applicazione per un'app Web .Net che sto creando. Continuo a ricevere errori su Configuration builder. Questo è l'errore che ricevo.

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?)

Presumo che riceverò lo stesso errore per il mio .AddJsonFile()e .AddEnvironmentVariables(). Ho fatto qualcosa di male? Non ho aggiunto la giusta dipendenza al mio project.json? Ho allegato il mio startup.cs e il mio project.json.

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

L'errore è nella public startupfunzione a destra nella parte superiore di startup.cs.

Risposte:


177

Sono riuscito a risolvere il problema. Se non l'hai ancora risolto, prova quanto segue in project.json. Aggiungi quanto segue:

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

e dovrebbe funzionare


Come si esegue questa operazione in EF Core 2.0 poiché ora non è presente alcun file project.json?
ATHER

3
@ATHER: aggiungi semplicemente le due pepite nello stesso modo in cui aggiungi qualsiasi altra pepita.
Dejan

5
@ATHER dotnet add package <packageName>dove packageName in questo caso è Microsoft.Extensions.Configuration.FileExtensions, o in Visual Studio aggiungi nuget package
William Ardila

53

Non sono sicuro che qualcuno si imbatta ancora in questo problema, ma sono stato in grado di risolverlo in un progetto di console dotnetcore (netcoreapp2.0) tramite:

dotnet add package Microsoft.Extensions.Configuration.Json

1
Grazie @bishop. L'aggiunta di questo nella mia libreria principale .net ha risolto il mio problema.
Wallace B. McClure

Sì, anche l'installazione di .JsonNuGet funziona.
James Hirschorn,

6

Prova ad aggiungere quanto segue nel tuo .csprojfile:

<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 e Microsoft.Extensions.Configuration.Json sono esattamente i pacchetti che mancano.
Ognyan Dimitrov

3

Se stai utilizzando .NET Core 1.x o .NET Standard 1.x , dovresti eseguire questo comando:

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

Se il tuo progetto è all'interno di un'altra cartella:

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

... dove MyProject è il nome del .csprojfile.


3

Sto solo accumulando un altro possibile problema ...

Ho dovuto aggiungere questo:

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

affinché questo venga compilato:

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

Modifica: ho scritto questa risposta diversi mesi fa, ma sono abbastanza sicuro che fosse per un'app console.


1
Ha funzionato come un fascino!
Daniel Cohen,

2

Aggiungi quanto segue al tuo project.json:

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

2

Prova ad aggiungere quanto segue alle tue dipendenze project.json: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

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

Questo ha funzionato per me.


1

Prova ad aggiungere quanto segue alle tue dipendenze project.json:

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

Grazie per il suggerimento! Ho provato ad aggiungerli entrambi a project.json e poi ho fatto un "ripristino dnu". Ma ricevo ancora lo stesso errore nel mio Startup.cs. Altre idee? Ho trovato la documentazione per la funzione esatta che sto usando qui . SetBasePath()
currymanswag

0

Inoltre, non dimenticare di impostare la proprietà "Copia nella directory di output" su "Copia sempre" del file Json dalla finestra Proprietà.


0

Qualcos'altro da considerare:

using Microsoft.Extensions.Configuration;

Senza l'istruzione "using", non trova il metodo di estensione in Microsoft.Extensions.Configuration.FileExtensions.

Il problema è sorto per me perché eravamo anche:

using System.Configuration;

E c'è stato uno scontro di nomi con "ConfigurationBuilder". Aggiungi il

using Microsoft.Extensions.Configuration;

riga ... rimuovere il file

using System.Configuration;

riga, quindi qualificare completamente qualsiasi cosa in System.Configuration.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.