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 startup
fonction juste en haut de startup.cs.
la source
dotnet add package <packageName>
où packageName dans ce cas estMicrosoft.Extensions.Configuration.FileExtensions
, ou dans Visual Studio ajouter un package nugetJe 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
la source
.Json
via NuGet fonctionne également.Essayez d'ajouter ce qui suit dans votre
.csproj
fichier:<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>
la source
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
.csproj
fichier.la source
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.
la source
Ajoutez ce qui suit à votre project.json:
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*"
la source
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.
la source
Essayez d'ajouter ce qui suit à vos dépendances project.json:
"Microsoft.Extensions.Configuration": "1.0.0-*", "Microsoft.Extensions.Configuration.Abstractions": "1.0.0-*",
la source
SetBasePath()
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.
la source
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.
la source