.NET Core 2.0에서 ConfigurationManager.AppSettings를 사용할 수 있습니까?


143

구성 파일에서 다음과 같이 설정을 읽는 방법이 있습니다.

var value = ConfigurationManager.AppSettings[key];

.NET Standard 2.0만을 대상으로 할 때 잘 컴파일됩니다.

이제 여러 대상이 필요하므로 프로젝트 파일을 다음과 같이 업데이트했습니다.

<TargetFrameworks>netcoreapp2.0;net461;netstandard2.0</TargetFrameworks>

그러나 이제 netcoreapp2.0다음 오류 메시지와 함께 컴파일이 실패 합니다.

Error   CS0103  The name 'ConfigurationManager' does not exist in the current context   (netcoreapp2.0)

별도로, 나는 새로운 .NET Core 2.0 콘솔 응용 프로그램을 만들었지 만 (이번에는 .NET Core 2.0만을 대상으로 함) ConfigurationManager네임 스페이스 에는없는 것처럼 보입니다 System.Configuration.

.NET Standard 2.0에서 사용할 수 있기 때문에 혼란 스럽습니다. 따라서 .NET Core 2.0은 .NET Standard 2.0과 호환되므로 .NET Core 2.0에서 사용할 수있을 것으로 기대합니다.

내가 무엇을 놓치고 있습니까?


11
당신은 아마 이것을보고 싶을 것입니다 . .NET 표준 대상은 .NET과 .NET Core를 모두 다루므로 별도로 빌드 할 필요는 없습니다.
Jeroen Mostert

NuGet 패키지 System.Configuration.ConfigurationManager를 추가하여 @JeroenMostert에게 감사의 말을 전했습니다. 자, 이것은 아마도 별도의 질문이지만 누락 된 비트를 polyfill하기 위해 패키지를 추가 해야하는 경우 .NET Core 2.0은 어떻게 .NET Standard 2.0과 호환되는 것으로 간주됩니까?
Alex Sanséau

2
".NET Standard 2.0 호환"은 ".NET Standard 2.0을 대상으로하도록 빌드하면 .NET Core 2.0 (다른 플랫폼 중에서)에서 실행됩니다"를 의미합니다. "이를 .NET Core 2.0을 대상으로 빌드하면 추가 조치없이 모든 .NET Standard 2.0 API를 사용할 수 있음"을 의미하지는 않습니다. 당신이 .NET 표준 2.0이 구축하고 .NET 코어에서 실행되지 않을 경우 다음 당신은 불만에 대한 원인을 가지고,하지만 난이 단지 작품에 갈 생각합니다. (하지만 테스트하지는 않았습니다.)
Jeroen Mostert

4
@ AlexSanséau NuGet 패키지는 폴리 필이 아닙니다. .NET Core에서 작업을 시작할 때 Microsoft는 API를 옵트 인하도록 결정했습니다. 즉, 응용 프로그램의 설치 공간이 더 작습니다. 시간을내어 Immo Landwerth가 .NET Standard ( youtube.com/… ) 에서 제작 한 비디오를 시청하는 것이 좋습니다. 그는 .NET Standard 팀의 PM입니다.
Jamie Taylor

1
RE : It compiles fine when targeting .NET Standard 2.0 only- . ConfigurationManagerNET 표준의 일부가 아니기 때문에 이것은 정확 하지 않습니다 (지금까지는 v.2.1까지 적용됨).
G. Stoynev

답변:


268

예, ConfigurationManager.AppSettingsNuGet 패키지를 참조한 후 .NET Core 2.0에서 사용할 수 있습니다 System.Configuration.ConfigurationManager.

크레딧은 저에게 해결책을 주신 @JeroenMostert에게갑니다.


1
구성 파일에서 코드를 게시 할 수 있습니까? 나는 .NET 코어 2.0 전역 변수를 설정 곳 방법 / 알아 내기 위해 노력하고있어
egmfrs을

1
@egmfrs, 제발 다시 말씀해 주시겠습니까? 전역 변수는 클래스의 정적 속성 형태로 존재합니다. 구성 파일에는 응용 프로그램 설정이 일반적인 형식으로 포함되어 있습니다.<add key="YourSetting" value="YourValue" />
Alex Sanséau

2
@ AlexSanséau, AppSettings의 값을 어디에서 설정할 수 있는지 알아 내려고합니다. web.config 또는 appsettings.json이 작동하지 않습니다. AppSettings를 설정할 위치를 예를 들어 주시겠습니까? 감사.
Jan Deutschl

2
@ JanDeutschl, 전통적인 .NET 프로젝트와 마찬가지로 web.config 또는 app.config의 appSettings 섹션으로 이동해야합니다.
Alex Sanséau

8
조금 혼란 스러워요. 이것은 .NET Framework 4.6종속성으로 나열 됩니다. .NET Core 프로젝트가 더 이상 순수한 Core프로젝트가 아닙니까?
James Poulose

20

System.Configuration.ConfigurationManagerNuget에서 .net core 2.2 응용 프로그램으로 설치 했습니다.

그런 다음 참조 using System.Configuration;

다음으로, 나는 바꿨다

WebConfigurationManager.AppSettings

to ..

ConfigurationManager.AppSettings

지금까지 나는 이것이 맞다고 믿는다. 4.5.0 is typical with .net core 2.2

나는 이것에 아무런 문제가 없었다.


이주를위한 쉬운 수정 사항 중 하나입니다. 다른 사람의 일부는 너무 재미 없습니다 : /
톰 Stickel

web.config 파일도 만들었습니까?
swedish_junior_dev

2
그것은 나를 위해 작동하지 않습니다 (.net core 3.1). 액세스 할 경우 설정 데이터가 없습니다
arteny

@Arteny-3.1로 테스트 한 적이 없습니다. 3.1을 설치하여 집에서 가지고 놀았지만 현재 클라이언트는 곧 업그레이드를 원하지 않습니다.
Tom Stickel

9

패키지가 설정되면 app.config 또는 web.config를 생성하고 다음과 같은 것을 추가해야합니다.

<configuration>
  <appSettings>
    <add key="key" value="value"/>
  </appSettings>
</configuration>

7

다음지도의 최신 집합은 다음과 같습니다 (에서 https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#environment-variables )

사용하다:

System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);

문서에서 :

public static class EnvironmentVariablesExample
{
    [FunctionName("GetEnvironmentVariables")]
    public static void Run([TimerTrigger("0 */5 * * * *")]TimerInfo myTimer, ILogger log)
    {
        log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
        log.LogInformation(GetEnvironmentVariable("AzureWebJobsStorage"));
        log.LogInformation(GetEnvironmentVariable("WEBSITE_SITE_NAME"));
    }

    public static string GetEnvironmentVariable(string name)
    {
        return name + ": " +
            System.Environment.GetEnvironmentVariable(name, EnvironmentVariableTarget.Process);
    }
}

로컬에서 개발하거나 Azure에서 실행할 때 환경 변수에서 앱 설정을 읽을 수 있습니다. 로컬로 개발할 때 앱 설정은 local.settings.json 파일 의 Values컬렉션에서 가져옵니다 . 로컬 및 Azure 환경 모두 에서 명명 된 앱 설정 값을 검색합니다. 예를 들어 로컬에서 실행중인 경우 local.settings.json 파일에가 포함되어 있으면 "내 사이트 이름"이 반환됩니다 .GetEnvironmentVariable("<app setting name>"){ "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }

System.Configuration.ConfigurationManager.AppSettings의 속성은 응용 프로그램의 설정 값을 얻기위한 대안 API이지만, 우리는 당신이 사용하는 것이 좋습니다 GetEnvironmentVariable다음과 같이.


이것을 시도하는 사람이라면 이것을 선언함으로써 Microsoft 예제와 유사한 구문을 얻을 수 있습니다.using static System.Environment;
MattMakes

1

구성을 사용하여이 문제를 해결할 수 있습니다.

예 (Startup.cs) :

이 구현 후에 DI를 통해 컨트롤러로 전달할 수 있습니다.

public class Startup
{
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        Configuration = builder.Build();

    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {

        var microserviceName = Configuration["microserviceName"];

       services.AddSingleton(Configuration);

       ...
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.