Définition du chemin de base à l'aide de ConfigurationBuilder

91

J'essaie de définir le chemin de base de l'application pour une application Web .Net que je construis. Je reçois des erreurs sur le générateur de configuration. C'est l'erreur que j'obtiens.

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

Je suppose que j'obtiendrai la même erreur pour mon .AddJsonFile()et .AddEnvironmentVariables(). Est-ce que j'ai fait quelque chose de mal? N'ai-je pas ajouté la bonne dépendance à mon project.json? J'ai joint mon startup.cs et mon 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'erreur se trouve dans la public startupfonction juste en haut de startup.cs.

currymanswag
la source

Réponses:

177

J'ai pu résoudre le problème. Si vous ne l'avez pas encore résolu, essayez ce qui suit dans project.json. Ajoutez ce qui suit:

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

et ça devrait marcher

Fouad Zakka
la source
Comment faire cela dans EF Core 2.0 puisqu'il n'y a plus de fichier project.json?
ATHER
3
@ATHER: ajoutez simplement les deux pépites de la même manière que vous ajoutez les autres pépites.
Dejan
5
@ATHER dotnet add package <packageName>où packageName dans ce cas est Microsoft.Extensions.Configuration.FileExtensions, ou dans Visual Studio ajouter un package nuget
William Ardila
53

Je ne sais pas si quelqu'un rencontre toujours ce problème, mais j'ai pu résoudre ce problème dans un projet de console dotnetcore (netcoreapp2.0) via:

dotnet add package Microsoft.Extensions.Configuration.Json
Évêque
la source
1
Merci @bishop. L'ajout de cela dans ma bibliothèque principale .net a résolu mon problème.
Wallace B.McClure
Oui, l'installation de .Jsonvia NuGet fonctionne également.
James Hirschorn le
6

Essayez d'ajouter ce qui suit dans votre .csprojfichier:

<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
la source
Microsoft.Extensions.Configuration.FileExtensions et Microsoft.Extensions.Configuration.Json sont exactement les packages qui manquent.
Ognyan Dimitrov
3

Si vous exécutez un .NET Core 1.x ou .NET Standard 1.x , vous devez exécuter cette commande:

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

Si votre projet se trouve dans un autre dossier:

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

... où MyProject est le nom du .csprojfichier.

Alisson
la source
3

Je ne fais qu'empiler un autre problème possible ...

J'ai dû ajouter ceci:

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

pour que cela compile:

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

Edit: J'ai écrit cette réponse il y a plusieurs mois, mais je suis presque sûr que c'était pour une application console.

Wellspring
la source
1
A travaillé comme un charme!
Daniel Cohen le
2

Ajoutez ce qui suit à votre project.json:

"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*"
dudu
la source
2

Essayez d'ajouter ce qui suit à vos dépendances project.json: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

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

Cela a fonctionné pour moi.

Pritesh Dhokchaule
la source
1

Essayez d'ajouter ce qui suit à vos dépendances project.json:

"Microsoft.Extensions.Configuration": "1.0.0-*",
"Microsoft.Extensions.Configuration.Abstractions": "1.0.0-*",
Brett Christensen
la source
Merci pour la suggestion! J'ai essayé d'ajouter les deux au project.json, puis j'ai fait une "restauration dnu". Mais j'obtiens toujours la même erreur dans mon Startup.cs. D'autres idées? J'ai trouvé la documentation de la fonction exacte que j'utilise ici . SetBasePath()
currymanswag
0

N'oubliez pas non plus de définir la propriété «Copier dans le répertoire de sortie» sur «Copier toujours» du fichier Json à partir de la fenêtre Propriétés.

emert117
la source
0

Autre chose à considérer:

using Microsoft.Extensions.Configuration;

Sans cette instruction "using", il ne trouve pas la méthode d'extension dans Microsoft.Extensions.Configuration.FileExtensions.

Le problème s'est posé pour moi parce que nous étions aussi:

using System.Configuration;

Et il y avait un conflit de nom avec "ConfigurationBuilder". Ajouter le

using Microsoft.Extensions.Configuration;

ligne ... supprimer le

using System.Configuration;

ligne, puis qualifiez complètement tout sous System.Configuration.

Chad Lehman
la source