Definindo o caminho base usando o ConfigurationBuilder


89

Estou tentando definir o caminho base do aplicativo para um aplicativo da web .Net que estou construindo. Continuo recebendo erros no construtor de configuração. Este é o erro que recebo.

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

Presumo que receberei o mesmo erro para meu .AddJsonFile()e .AddEnvironmentVariables(). Fiz algo de errado? Eu não adicionei a dependência certa ao meu project.json? Incluí meu startup.cs e meu 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);
  }
}

O erro está na public startupfunção próxima ao topo de startup.cs.

Respostas:


172

Consegui resolver o problema. Se você ainda não resolveu, tente o seguinte no project.json. Adicione o seguinte:

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

e deve funcionar


Como faço isso no EF Core 2.0, já que agora não há nenhum arquivo project.json?
— ATHER

3
@ATHER: basta adicionar os dois nugets da mesma forma que adiciona quaisquer outros nugets.
— Dejan

5
@ATHER dotnet add package <packageName>onde packageName neste caso é Microsoft.Extensions.Configuration.FileExtensions, ou no Visual Studio adicionar pacote nuget
— William Ardila

49

Não tenho certeza se alguém ainda tem esse problema, mas consegui resolver isso em um projeto de console dotnetcore (netcoreapp2.0) por meio de:

dotnet add package Microsoft.Extensions.Configuration.Json

1
Obrigado @bishop. Adicionar isso à minha biblioteca principal .net resolveu meu problema.
— Wallace B. McClure

Sim, a instalação do .Jsonatravés do NuGet também funciona.
— James Hirschorn

6

Tente adicionar o seguinte em seu .csprojarquivo:

<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 e Microsoft.Extensions.Configuration.Json são exatamente os pacotes que estão faltando.
— Ognyan Dimitrov

3

Se você estiver executando um .NET Core 1.x ou .NET Standard 1.x , deverá executar este comando:

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

Se o seu projeto estiver dentro de outra pasta:

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

... onde MyProject é o nome do .csprojarquivo.


3

Continuando com mais um possível problema ...

Eu tive que adicionar isto:

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

para compilar:

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

Edit: Escrevi esta resposta há vários meses, mas tenho certeza de que era para um aplicativo de console.


1
Funcionou como um encanto!
— Daniel Cohen

2

Adicione o seguinte ao seu project.json:

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

2

Tente adicionar o seguinte às suas dependências project.json: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

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

Isso funcionou para mim.


1

Tente adicionar o seguinte às suas dependências project.json:

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

Obrigado pela sugestão! Tentei adicionar ambos ao project.json e então fiz um "dnu restore". Mas ainda estou recebendo o mesmo erro no meu Startup.cs. Alguma outra ideia? Encontrei a documentação para a função exata que estou usando aqui . SetBasePath()
— currymanswag

0

Além disso, não se esqueça de definir a propriedade "Copiar para diretório de saída" como "Copiar sempre" do arquivo Json na janela Propriedades.


0

Outra coisa a considerar:

using Microsoft.Extensions.Configuration;

Sem essa instrução "usando", ele não encontra o método de extensão em Microsoft.Extensions.Configuration.FileExtensions.

O problema surgiu para mim porque também estávamos:

using System.Configuration;

E houve um conflito de nomes com "ConfigurationBuilder". Adicione o

using Microsoft.Extensions.Configuration;

linha ... remova o

using System.Configuration;

linha, em seguida, qualificar totalmente qualquer coisa em System.Configuration.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.