ConfigurationBuilder를 사용하여 기본 경로 설정


94

내가 구축중인 .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 startupstartup.cs의 맨 위에 있는 함수에 있습니다.

답변:


179

문제를 해결할 수있었습니다. 아직 해결하지 않은 경우 project.json에서 다음을 시도하십시오. 다음을 추가하십시오.

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

그리고 그것은 작동합니다


이제 project.json 파일이 없기 때문에 EF Core 2.0에서 어떻게해야합니까?
— ATHER

3
@ATHER : 다른 너겟을 추가하는 것과 같은 방식으로 두 너겟을 추가하십시오.
— Dejan

5
@ATHER dotnet add package <packageName>여기서 packageName이 경우에 Microsoft.Extensions.Configuration.FileExtensions, 또는 Visual Studio에서이 nuget 패키지를 추가
— 윌리엄 Ardila

54

아무도 여전히이 문제가 발생하는지 확실하지 않지만 다음을 통해 dotnetcore 콘솔 프로젝트 (netcoreapp2.0)에서이 문제를 해결할 수있었습니다.

dotnet add package Microsoft.Extensions.Configuration.Json

1
감사합니다 @bishop. 내 .net 코어 라이브러리에 추가하면 문제가 해결되었습니다.
— Wallace B. McClure

예, .JsonNuGet을 통한 설치 도 작동합니다.
— 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 복원"을 수행했습니다. 하지만 내 Startup.cs에서 여전히 동일한 오류가 발생합니다. 다른 아이디어가 있습니까? 여기에서 사용중인 정확한 기능에 대한 설명서를 찾았습니다 . SetBasePath()
— currymanswag

0

또한 속성 창에서 "출력 디렉터리로 복사"속성을 "항상 복사"로 설정하는 것을 잊지 마십시오.


0

고려해야 할 다른 사항 :

using Microsoft.Extensions.Configuration;

"using"문이 없으면 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.