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.