Ustawianie ścieżki podstawowej za pomocą ConfigurationBuilder


91

Próbuję ustawić ścieżkę podstawową aplikacji dla aplikacji sieci web .Net, którą buduję. Ciągle otrzymuję błędy w narzędziu do tworzenia konfiguracji. To jest błąd, który otrzymuję.

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

Zakładam, że otrzymam ten sam błąd dla mojego .AddJsonFile()i .AddEnvironmentVariables(). Czy zrobiłem coś złego? Czy nie dodałem odpowiedniej zależności do mojego pliku project.json? Załączam moje startup.cs i mój 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);
  }
}

Błąd znajduje się w public startupfunkcji tuż u góry pliku startup.cs.

Odpowiedzi:


177

Udało mi się rozwiązać problem. Jeśli jeszcze tego nie rozwiązałeś, spróbuj wykonać następujące czynności w pliku project.json. Dodaj następujące informacje:

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

i powinno działać


Jak to zrobić w EF Core 2.0, skoro teraz nie ma pliku project.json?
ATHER

3
@ATHER: po prostu dodaj dwa nugety w taki sam sposób, w jaki dodajesz inne nugety.
Dejan

5
@ATHER, dotnet add package <packageName>gdzie nazwa_pakietu w tym przypadku jest Microsoft.Extensions.Configuration.FileExtensionslub w programie Visual Studio dodaj pakiet NuGet
William Ardila

53

Nie jestem pewien, czy ktoś nadal napotyka ten problem, ale udało mi się rozwiązać ten problem w projekcie konsoli dotnetcore (netcoreapp2.0) za pośrednictwem:

dotnet add package Microsoft.Extensions.Configuration.Json

1
Dzięki @bishop. Dodanie tego do mojej biblioteki .net core rozwiązało mój problem.
Wallace B. McClure

Tak, .Jsondziała również instalacja przez NuGet.
James Hirschorn

6

Spróbuj dodać do swojego .csprojpliku:

<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 i Microsoft.Extensions.Configuration.Json to dokładnie te pakiety, których brakuje.
Ognyan Dimitrov

3

Jeśli używasz platformy .NET Core 1.x lub .NET Standard 1.x , powinieneś uruchomić to polecenie:

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

Jeśli Twój projekt znajduje się w innym folderze:

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

...gdzie MyProject to nazwa .csprojpliku.


3

Po prostu mam jeszcze jeden możliwy problem ...

Musiałem to dodać:

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

aby to się skompilowało:

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

Edycja: napisałem tę odpowiedź kilka miesięcy temu, ale jestem prawie pewien, że dotyczyła aplikacji konsolowej.


1
Działał jak urok!
Daniel Cohen,

2

Dodaj następujące elementy do pliku project.json:

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

2

Spróbuj dodać następujące elementy do zależności project.json: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

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

To zadziałało dla mnie.


1

Spróbuj dodać następujące elementy do zależności project.json:

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

Dzieki za sugestie! Próbowałem dodać oba pliki do pliku project.json, a następnie wykonałem „przywracanie dnu”. Ale nadal pojawia się ten sam błąd w moim Startup.cs. Jakieś inne pomysły? Znalazłem dokumentację dokładnej funkcji, której tutaj używam . SetBasePath()
currymanswag

0

Ponadto nie zapomnij ustawić właściwości „Kopiuj do katalogu wyjściowego” na „Zawsze kopiuj” pliku Json w oknie Właściwości.


0

Coś innego do rozważenia:

using Microsoft.Extensions.Configuration;

Bez tej instrukcji "using" nie znajdzie metody rozszerzającej w Microsoft.Extensions.Configuration.FileExtensions.

Problem pojawił się dla mnie, ponieważ byliśmy również:

using System.Configuration;

Wystąpił konflikt nazw z „ConfigurationBuilder”. Dodaj

using Microsoft.Extensions.Configuration;

linia ... usuń

using System.Configuration;

line, a następnie w pełni zakwalifikuj wszystko w System.Configuration.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.