ConfigurationBuilder kullanarak Temel Yolu Ayarlama


91

Oluşturmakta olduğum bir .Net web uygulaması için uygulama temel yolunu ayarlamaya çalışıyorum. Yapılandırma oluşturucuda hata almaya devam ediyorum. Aldığım hata bu.

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

Benim .AddJsonFile()ve için aynı hatayı alacağımı varsayıyorum .AddEnvironmentVariables(). Ben yanlış bir şey mi yaptım? Project.json'a doğru bağımlılığı eklemedim mi? Startup.cs ve project.json dosyamı ekledim.

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

Hata, public startupstartup.cs dosyasının hemen üst kısmındaki işlevdedir.

Yanıtlar:


177

Sorunu çözebildim. Henüz çözmediyseniz, project.json'da aşağıdakileri deneyin. Aşağıdakileri ekleyin:

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

ve çalışmalı


Şu anda project.json dosyası olmadığından, bunu EF Core 2.0'da nasıl yapabilirsiniz?
ATHER

3
@ATHER: iki nugeti, diğer nugetleri eklediğiniz şekilde ekleyin.
Dejan

5
@ATHER dotnet add package <packageName>, bu durumda packageName Microsoft.Extensions.Configuration.FileExtensionsveya Visual Studio'da nuget paketi ekleyin
William Ardila

53

Hala bu sorunla karşılaşıp karşılaşmadığından emin değilim, ancak bunu bir dotnetcore konsol projesinde (netcoreapp2.0) şu yolla çözebildim:

dotnet add package Microsoft.Extensions.Configuration.Json

1
Teşekkürler @ piskopos. Bunu .net çekirdek kitaplığıma eklemek sorunumu çözdü.
Wallace B. McClure

Evet, .JsonNuGet aracılığıyla yükleme de çalışır.
James Hirschorn

6

Aşağıdakileri .csprojdosyanıza eklemeyi deneyin :

<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 ve Microsoft.Extensions.Configuration.Json tam olarak eksik olan paketlerdir.
Ognyan Dimitrov

3

Bulursan çalışan Eğer .NET Çekirdek 1.x veya .NET Standart 1.x , bu komutu çalıştırmak gerekir:

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

Projeniz başka bir klasörün içindeyse:

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

... burada MyProject.csproj dosyanın adıdır .


3

Sadece olası bir sorunla uğraşıyorum ...

Bunu eklemek zorunda kaldım:

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

bunun derlenmesi için:

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

Düzenleme: Bu cevabı birkaç ay önce yazdım, ancak bir konsol uygulaması için olduğundan oldukça eminim.


1
Büyü gibi çalıştı!
Daniel Cohen

2

Aşağıdakileri project.json dosyanıza ekleyin:

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

2

Project.json bağımlılıklarınıza aşağıdakileri eklemeyi deneyin: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

Veya project.csproj'da:
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1" />

Bu benim için çalıştı.


1

Project.json bağımlılıklarınıza aşağıdakileri eklemeyi deneyin:

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

Önerin için teşekkürler! İkisini de project.json dosyasına eklemeyi denedim ve sonra bir "dnu restore" yaptım. Ama yine de Startup.cs dosyamda aynı hatayı alıyorum. Başka fikir var mı? Burada kullandığım tam işlevin belgelerini buldum . SetBasePath()
currymanswag

0

Ayrıca Özellikler penceresinden Json dosyasının "Çıktı Dizinine Kopyala" özelliğini "Her zaman kopyala" olarak ayarlamayı unutmayın.


0

Dikkate alınması gereken başka bir şey:

using Microsoft.Extensions.Configuration;

Bu "using" ifadesi olmadan, uzantı yöntemini Microsoft.Extensions.Configuration.FileExtensions içinde bulamaz.

Sorun benim için arttı çünkü biz de:

using System.Configuration;

Ve "ConfigurationBuilder" ile bir isim çatışması oldu. Ekle

using Microsoft.Extensions.Configuration;

satır ... kaldır

using System.Configuration;

satır, ardından System.Configuration altındaki her şeyi tam olarak nitelendirin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.