Встановлення базового шляху за допомогою ConfigurationBuilder


90

Я намагаюся встановити базовий шлях до програми для веб-програми .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.

Відповіді:


176

Я зміг вирішити цю проблему. Якщо ви ще цього не вирішили, спробуйте наступне в project.json. Додайте наступне:

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

і це повинно спрацювати


Як це зробити в EF Core 2.0, оскільки зараз немає файлу project.json?
ATHER

3
@ATHER: просто додайте два нагетси так само, як і будь-які інші нагетси.
Деян

5
@ATHER, dotnet add package <packageName>де в цьому випадку є packageName Microsoft.Extensions.Configuration.FileExtensions, або у Visual Studio додати nuget-пакет
William Ardila

51

Не впевнений, що хтось все ще стикається з цією проблемою, але мені вдалося вирішити це у проекті консолі dotnetcore (netcoreapp2.0) за допомогою:

dotnet add package Microsoft.Extensions.Configuration.Json

1
Дякую @bishop. Додавши, що в моїй основній бібліотеці .net моя проблема вирішена.
Уоллес Б. МакКлюр,

Так, установка .Jsonнаскрізного NuGet теж працює.
Джеймс Гіршхорн,

6

Спробуйте додати у свій .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 - це саме ті пакети, які відсутні.
Огнян Димитров

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
Працював як оберіг!
Даніель Коен,

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". Але я все ще отримую ту саму помилку в моєму Startup.cs. Будь-які інші ідеї? Я знайшов документацію щодо точної функції, яку я використовую тут . SetBasePath()
currymanswag

0

Крім того, не забудьте встановити для властивості "Копіювати до вихідного каталогу" значення "Копіювати завжди" файлу Json з вікна Властивості.


0

Щось інше, щоб врахувати:

using Microsoft.Extensions.Configuration;

Без цього оператора "using" він не знаходить методу розширення в Microsoft.Extensions.Configuration.FileExtensions.

Проблема з’явилася для мене, тому що ми також були:

using System.Configuration;

І сталося зіткнення назв із "ConfigurationBuilder". Додайте

using Microsoft.Extensions.Configuration;

рядок ... видалити

using System.Configuration;

рядок, а потім повністю кваліфікуйте будь-що під System.Configuration.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.