Đặt đường dẫn cơ sở bằng ConfigurationBuilder


90

Tôi đang cố đặt đường dẫn cơ sở ứng dụng cho ứng dụng web .Net mà tôi đang xây dựng. Tôi tiếp tục gặp lỗi trên Trình tạo cấu hình. Đây là lỗi tôi nhận được.

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

Tôi cho rằng tôi sẽ gặp lỗi tương tự đối với .AddJsonFile()và của tôi .AddEnvironmentVariables(). Tôi đã làm gì sai sao? Tôi đã không thêm đúng phụ thuộc vào project.json của mình? Tôi đã đính kèm startup.cs và project.json của mình.

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ỗi nằm trong public startuphàm ngay gần đầu startup.cs.

Câu trả lời:


176

Tôi đã có thể giải quyết vấn đề. Nếu bạn vẫn chưa giải quyết được nó, hãy thử cách sau trong project.json. Thêm những điều sau:

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

và nó sẽ hoạt động


Làm cách nào để thực hiện điều này trong EF Core 2.0 vì bây giờ không có tệp project.json?
ATHER

3
@ATHER: chỉ cần thêm hai cốm giống như cách bạn thêm bất kỳ cốm nào khác.
Dejan

5
@ATHER dotnet add package <packageName>nơi PACKAGENAME trong trường hợp này là Microsoft.Extensions.Configuration.FileExtensions, hoặc trong Visual Studio thêm gói NuGet
William Ardila

51

Không chắc liệu có ai còn gặp sự cố này không nhưng tôi đã có thể giải quyết vấn đề này trong một dự án bảng điều khiển dotnetcore (netcoreapp2.0) thông qua:

dotnet add package Microsoft.Extensions.Configuration.Json

1
Cảm ơn @bishop. Thêm điều đó vào thư viện lõi .net của tôi đã giải quyết được vấn đề của tôi.
Wallace B. McClure

Có, cài đặt .Jsonthông qua NuGet cũng hoạt động.
James Hirschorn

6

Hãy thử thêm phần sau vào .csprojtệp của bạn :

<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 và Microsoft.Extensions.Configuration.Json chính xác là các gói bị thiếu.
Ognyan Dimitrov

3

Nếu bạn đang chạy .NET Core 1.x hoặc .NET Standard 1.x , bạn nên chạy lệnh này:

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

Nếu dự án của bạn nằm trong một thư mục khác:

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

... trong đó MyProject là tên của .csprojtệp.


3

Chỉ cần chồng chất thêm một vấn đề có thể xảy ra ...

Tôi đã phải thêm điều này:

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

để biên dịch cái này:

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

Chỉnh sửa: Tôi đã viết câu trả lời này vài tháng trước, nhưng tôi khá chắc chắn rằng nó dành cho một ứng dụng console.


1
Làm việc như người ở!
Daniel Cohen

2

Thêm phần sau vào project.json của bạn:

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

2

Hãy thử thêm phần sau vào phần phụ thuộc project.json của bạn: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

Hoặc trong project.csproj:
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1" />

Điều này đã làm việc cho tôi.


1

Hãy thử thêm phần sau vào phần phụ thuộc project.json của bạn:

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

Cám ơn vì sự gợi ý! Tôi đã thử thêm cả hai vào project.json và sau đó thực hiện "khôi phục dnu". Nhưng tôi vẫn gặp lỗi tương tự trong Startup.cs của mình. Bất kỳ ý tưởng khác? Tôi đã tìm thấy tài liệu cho chức năng chính xác mà tôi đang sử dụng ở đây . SetBasePath()
currymanswag

0

Ngoài ra, đừng quên đặt thuộc tính "Copy to Output Directory" thành "Copy luôn" của tệp Json từ cửa sổ Properties.


0

Một cái gì đó khác để xem xét:

using Microsoft.Extensions.Configuration;

Nếu không có câu lệnh "using" đó, nó sẽ không tìm thấy phương thức mở rộng trong Microsoft.Extensions.Configuration.FileExtensions.

Rắc rối xảy ra với tôi vì chúng tôi cũng:

using System.Configuration;

Và có một cuộc đụng độ tên với "ConfigurationBuilder". Thêm

using Microsoft.Extensions.Configuration;

dòng ... loại bỏ

using System.Configuration;

, sau đó đáp ứng đầy đủ mọi điều kiện trong System.Configuration.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.