การตั้งค่าเส้นทางฐานโดยใช้ ConfigurationBuilder


98

ฉันกำลังพยายามกำหนดเส้นทางพื้นฐานของแอปพลิเคชันสำหรับเว็บแอป. Net ที่ฉันกำลังสร้าง ฉันได้รับข้อผิดพลาดในเครื่องมือสร้างการกำหนดค่า นี่คือข้อผิดพลาดที่ฉันได้รับ

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

ฉันสมมติว่าฉันจะได้รับข้อผิดพลาดเดียวกันสำหรับ.AddJsonFile()และ.AddEnvironmentVariables(). ฉันทำอะไรผิดหรือเปล่า? ฉันไม่ได้เพิ่มการอ้างอิงที่ถูกต้องให้กับ project.json ของฉันหรือไม่ ฉันได้แนบ startup.cs และ 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);
  }
}

ข้อผิดพลาดอยู่ในpublic startupฟังก์ชันใกล้ด้านบนของ startup.cs

คำตอบ:


185

ฉันสามารถแก้ปัญหาได้ หากคุณยังไม่ได้แก้ไขให้ลองทำตามขั้นตอนต่อไปนี้ใน project.json เพิ่มสิ่งต่อไปนี้:

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

และควรใช้งานได้


จะทำอย่างไรใน EF Core 2.0 เนื่องจากตอนนี้ไม่มีไฟล์ project.json
60

3
@ATHER: เพียงแค่เพิ่มนักเก็ตทั้งสองแบบเดียวกับที่คุณเพิ่มนักเก็ตอื่น ๆ
เดยัน

5
@ATHER dotnet add package <packageName>โดยที่ packageName ในกรณีนี้คือMicrosoft.Extensions.Configuration.FileExtensionsหรือใน Visual Studio เพิ่มแพ็คเกจ nuget
William Ardila

54

ไม่แน่ใจว่ายังมีใครพบปัญหานี้หรือไม่ แต่ฉันสามารถแก้ไขปัญหานี้ได้ในโครงการคอนโซล dotnetcore (netcoreapp2.0) ผ่าน:

dotnet add package Microsoft.Extensions.Configuration.Json

1
ขอบคุณ @bishop. การเพิ่มสิ่งนั้นในไลบรารี. net core ของฉันช่วยแก้ปัญหาของฉันได้
Wallace B.McClure

ใช่การติดตั้ง.Jsonผ่าน NuGet ก็ใช้ได้เช่นกัน
James Hirschorn

7

ลองเพิ่มสิ่งต่อไปนี้ใน.csprojไฟล์ของคุณ:

<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 และ Microsoft.Extensions.Configuration.Json เป็นแพ็กเกจที่หายไป
Ognyan Dimitrov

3

หากคุณกำลังเรียกใช้. NET Core 1.xหรือ. NET Standard 1.xคุณควรรันคำสั่งนี้:

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

หากโปรเจ็กต์ของคุณอยู่ในโฟลเดอร์อื่น:

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

... โดยที่MyProjectคือชื่อของ.csprojไฟล์


3

เพียงแค่ซ้อนทับกับอีกหนึ่งปัญหาที่เป็นไปได้ ...

ฉันต้องเพิ่มสิ่งนี้:

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

เพื่อให้สิ่งนี้รวบรวม:

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

แก้ไข: ฉันเขียนคำตอบนี้เมื่อหลายเดือนก่อน แต่ค่อนข้างแน่ใจว่าเป็นสำหรับแอปคอนโซล


1
ทำงานอย่างมีเสน่ห์!
Daniel Cohen

2

เพิ่มสิ่งต่อไปนี้ใน project.json ของคุณ:

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

2

ลองเพิ่มสิ่งต่อไปนี้ในการอ้างอิง project.json ของคุณ: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

หรือใน project.csproj:
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1" />

สิ่งนี้ได้ผลสำหรับฉัน


1

ลองเพิ่มสิ่งต่อไปนี้ในการอ้างอิง project.json ของคุณ:

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

ขอบคุณสำหรับคำแนะนำ! ฉันลองเพิ่มทั้งสองอย่างลงใน project.json จากนั้นทำการ "dnu restore" แต่ฉันยังคงได้รับข้อผิดพลาดเดียวกันใน Startup.cs ของฉัน ความคิดอื่น ๆ ? ผมพบว่าเอกสารสำหรับฟังก์ชั่นที่แน่นอนฉันใช้ที่นี่ SetBasePath()
currymanswag

0

นอกจากนี้อย่าลืมตั้งค่าคุณสมบัติ "Copy to Output Directory" เป็น "Copy always" ของไฟล์ Json จากหน้าต่าง Properties


0

สิ่งอื่นที่ต้องพิจารณา:

using Microsoft.Extensions.Configuration;

หากไม่มีคำสั่ง "ใช้" นั้นจะไม่พบวิธีการขยายใน Microsoft.Extensions.Configuration.FileExtensions

ปัญหาเกิดขึ้นสำหรับฉันเพราะเรายัง:

using System.Configuration;

และมีชื่อปะทะกับ "ConfigurationBuilder" เพิ่มไฟล์

using Microsoft.Extensions.Configuration;

บรรทัด ... ลบ

using System.Configuration;

บรรทัดจากนั้นมีคุณสมบัติครบถ้วนภายใต้ System.Configuration

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.