Menyetel Jalur Basis menggunakan ConfigurationBuilder

91

Saya mencoba menyetel jalur dasar aplikasi untuk aplikasi web .Net yang sedang saya buat. Saya terus mendapatkan kesalahan pada pembuat Konfigurasi. Ini adalah kesalahan yang saya dapatkan.

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

Saya berasumsi saya akan mendapatkan kesalahan yang sama untuk saya .AddJsonFile()dan .AddEnvironmentVariables(). Apakah saya melakukan sesuatu yang salah? Apakah saya tidak menambahkan dependensi yang benar ke project.json saya? Saya telah menyertakan startup.cs dan project.json saya.

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

Kesalahan ada di public startupfungsi tepat di dekat bagian atas startup.cs.

currymanswag
sumber

Jawaban:

177

Saya bisa mengatasi masalah tersebut. Jika Anda belum menyelesaikannya, coba yang berikut ini di project.json. Tambahkan berikut ini:

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

dan itu harus berhasil

Fouad Zakka
sumber
Bagaimana melakukan ini di EF Core 2.0 karena sekarang tidak ada file project.json?
ATHER
3
@ AYAH: cukup tambahkan dua nuget dengan cara yang sama seperti Anda menambahkan nuget lainnya.
Dejan
5
@ATHER dotnet add package <packageName>dimana packageName dalam hal ini Microsoft.Extensions.Configuration.FileExtensions, atau di Visual Studio tambahkan paket nuget
William Ardila
53

Tidak yakin apakah ada yang masih mengalami masalah ini tetapi saya dapat mengatasinya dalam proyek konsol dotnetcore (netcoreapp2.0) melalui:

dotnet add package Microsoft.Extensions.Configuration.Json
Uskup
sumber
1
Terima kasih @bishop. Menambahkan itu di pustaka inti .net saya memecahkan masalah saya.
Wallace B. McClure
Ya, menginstal .Jsonmelalui NuGet juga berfungsi.
James Hirschorn
6

Coba tambahkan yang berikut ini di .csprojfile Anda :

<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
sumber
Microsoft.Extensions.Configuration.FileExtensions dan Microsoft.Extensions.Configuration.Json persis paket yang hilang.
Ognyan Dimitrov
3

Jika Anda menjalankan .NET Core 1.x atau .NET Standard 1.x , Anda harus menjalankan perintah ini:

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

Jika proyek Anda ada di dalam folder lain:

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

... dengan MyProject adalah nama .csprojfile.

Alisson
sumber
3

Hanya bertumpuk dengan satu kemungkinan masalah lagi ...

Saya harus menambahkan ini:

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

agar ini dapat dikompilasi:

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

Sunting: Saya menulis jawaban ini beberapa bulan yang lalu, tapi saya cukup yakin itu untuk aplikasi konsol.

Mata air
sumber
1
Bekerja seperti pesona!
Daniel Cohen
2

Tambahkan berikut ini ke project.json Anda:

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

Coba tambahkan berikut ini ke dependensi project.json Anda: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

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

Ini berhasil untuk saya.

Pritesh Dhokchaule
sumber
1

Coba tambahkan berikut ini ke dependensi project.json Anda:

"Microsoft.Extensions.Configuration": "1.0.0-*",
"Microsoft.Extensions.Configuration.Abstractions": "1.0.0-*",
Brett Christensen
sumber
Terima kasih untuk sarannya! Saya mencoba menambahkan keduanya ke project.json dan kemudian melakukan "dnu restore". Tetapi saya masih mendapatkan kesalahan yang sama di Startup.cs saya. Ada ide lain? Saya menemukan dokumentasi untuk fungsi persis yang saya gunakan di sini . SetBasePath()
currymanswag
0

Selain itu, jangan lupa untuk mengatur properti "Salin ke Direktori Output" ke "Salin selalu" file Json dari jendela Properti.

emert117
sumber
0

Hal lain yang perlu dipertimbangkan:

using Microsoft.Extensions.Configuration;

Tanpa pernyataan "using", itu tidak menemukan metode ekstensi di Microsoft.Extensions.Configuration.FileExtensions.

Masalahnya muncul untuk saya karena kami juga:

using System.Configuration;

Dan ada bentrokan nama dengan "ConfigurationBuilder". Tambahkan

using Microsoft.Extensions.Configuration;

baris ... hapus

using System.Configuration;

baris, kemudian sepenuhnya memenuhi syarat apa pun di bawah System.Configuration.

Chad Lehman
sumber