ConfigurationManager.AppSettings .NET Core 2.0'da mevcut mu?


143

Ayarlarımdan ayarları böyle okuyan bir yöntemim var:

var value = ConfigurationManager.AppSettings[key];

Yalnızca .NET Standard 2.0'ı hedeflerken iyi derler.

Şimdi birden fazla hedefe ihtiyacım var, bu yüzden proje dosyamı şu şekilde güncelledim:

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

Ancak, derleme netcoreapp2.0aşağıdaki hata iletisiyle başarısız olur :

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

Ayrı olarak, yeni bir .NET Core 2.0 konsol uygulaması oluşturdum (bu sefer sadece .NET Core 2.0'ı hedefleyen), ancak aynı şekilde ConfigurationManager ad alanının altındaSystem.Configuration .

.NET Standard 2.0 altında mevcut olduğu için oldukça kafam karıştı, bu yüzden .NET Core 2.0 .NET Standard 2.0 uyumlu olduğu için .NET Core 2.0'da kullanılabilir olmasını bekliyorum.

Neyi kaçırıyorum?


11
Muhtemelen kaçırıyorsun bu . (Bir .NET Standard hedefinin hem .NET hem de .NET Core'u kapsadığını unutmayın , bu yüzden bunları ayrı ayrı oluşturmaya da gerek yoktur.)
Jeroen Mostert

Nuenet System.Configuration.ConfigurationManager ekleyerek @JeroenMostert teşekkürler sorunu çözdü. Şimdi, bu muhtemelen ayrı bir soru ama biri eksik bitleri doldurmak için paketleri eklemek gerekiyorsa .NET Core 2.0 .NET Standard 2.0 uyumlu olarak kabul edilir?
Alex Sanséau

2
".NET Standard 2.0 uyumlu", "bunu .NET Standard 2.0'ı hedefleyecek şekilde oluşturursanız, .NET Core 2.0'da (diğer platformların yanı sıra) çalışır" anlamına gelir. "Bunu .NET Core 2.0'ı hedeflemek için oluşturursanız, tüm .NET Standard 2.0 API'leri başka bir işlem yapılmadan kullanılabilir" anlamına gelmez. .NET Standard 2.0 Bu inşa etmek ve onu NET Çekirdeği yayınlanmaz ise o zaman sen neden şikayet için var, ama bu sadece işe gidiyor. (Yine de test etmedim.)
Jeroen Mostert

4
@ AlexSanséau NuGet paketleri çoklu dolgular değildir. .NET Core üzerinde çalışmaya başlarken Microsoft, API'leri etkinleştirmeye karar verdi, yani uygulamalarınız daha az yer kaplıyor. Biraz zaman ayırmanızı ve Immo Landwerth'ın .NET Standard'da ( youtube.com/… ) oluşturduğu videoları izlemenizi tavsiye ederim - o .NET Standart ekibindeki Başbakan
Jamie Taylor

1
RE: It compiles fine when targeting .NET Standard 2.0 only- bu doğru olamaz, çünkü ConfigurationManager.NET Standard'ın bir parçası değildir (şu ana kadar v.2.1'e kadar geçerlidir).
G. Stoynev

Yanıtlar:


268

Evet, ConfigurationManager.AppSettings.NET Core 2.0'da NuGet paketine başvurduktan sonra kullanılabilir System.Configuration.ConfigurationManager.

Krediler bana çözümü için @JeroenMostert'a gidiyor.


1
Yapılandırma dosyanızdan kod gönderebilir misiniz? Nasıl / nerede .NET Core 2.0 global bir değişken ayarlamak nerede anlamaya çalışıyorum
egmfrs

1
@egmfrs, lütfen yeniden ifade etmek ister misiniz? Global değişkenler bir sınıfın statik özellikleri biçiminde mevcut olacaktır. Yapılandırma dosyaları uygulama ayarlarını kendi genel biçimidir:<add key="YourSetting" value="YourValue" />
Alex Sanséau

2
@ AlexSanséau, AppSettings için değerleri nerede ayarlayabileceğimi anlamaya çalışıyorum. web.config veya appsettings.json çalışmıyor. AppSettings'i nereye ayarlayacağınıza ilişkin bir örnek verebilir misiniz? Teşekkürler.
Jan Deutschl

2
@JanDeutschl, geleneksel bir .NET projesi için yaptığınız gibi web.config veya app.config dosyanızın appSettings bölümüne gitmelidir.
Alex Sanséau

8
Biraz kafam karıştı. Bu .NET Framework 4.6bir bağımlılık olarak listelenir . Bu, benim '.NET Core` projemin artık saf bir Coreproje olmadığı anlamına mı geliyor ?
James Poulose

20

yükledim System.Configuration.ConfigurationManager benim .net çekirdek 2.2 uygulamaya Nuget dan.

Sonra referans veriyorum using System.Configuration;

Sonra değiştim

WebConfigurationManager.AppSettings

to ..

ConfigurationManager.AppSettings

Şimdiye kadar bunun doğru olduğuna inanıyorum. 4.5.0 is typical with .net core 2.2

Bununla ilgili herhangi bir sorun yaşamadım.


Geçiş için yapılacak kolay düzeltmelerden biri. Diğerlerinden bazıları o kadar eğlenceli değil: /
Tom Stickel

ayrıca bir web.config dosyası mı oluşturdunuz?
swedish_junior_dev

2
benim için çalışmıyor (.net core 3.1). erişim varsa herhangi bir ayar verisi yok
arteny

@Arteny - 3.1 ile hiç test etmedim - 3.1'i yükledim ve evde oynadım - ancak mevcut müşterim yakın zamanda yükseltmek istemiyor.
Tom Stickel

9

Paket kurulumunu yaptıktan sonra, bir app.config veya web.config oluşturmanız ve aşağıdakine benzer bir şey eklemeniz gerekir:

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

7

En son rehberlik seti şu şekildedir: ( https://docs.microsoft.com/en-us/azure/azure-functions/functions-dotnet-class-library#environment-variables )

kullanın:

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

Dokümanlardan:

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);
    }
}

Uygulama ayarları, hem yerel olarak geliştirilirken hem de Azure'da çalıştırılırken ortam değişkenlerinden okunabilir. Yerel olarak geliştirirken, uygulama ayarları local.settings.json dosyasındaki Valueskoleksiyondan gelir . Her iki ortamda da, yerel ve Azure, adlandırılan uygulama ayarının değerini alır. Örneğin, yerel olarak çalışırken, local.settings.json dosyanız içeriyorsa "Site Adım" döndürülür .GetEnvironmentVariable("<app setting name>"){ "Values": { "WEBSITE_SITE_NAME": "My Site Name" } }

System.Configuration.ConfigurationManager.AppSettings özellik uygulama ayar değerlerini almak için alternatif bir API, ama biz kullanmanızı öneririz GetEnvironmentVariableburada gösterildiği gibi.


Bunu deneyen herkes için, bunu bildirerek Microsoft örneğine benzer bir sözdizimi alırsınız:using static System.Environment;
MattMakes

1

Bu sorunu çözmek için Yapılandırma'yı kullanabilirsiniz.

Örn (Startup.cs):

Bu uygulamadan sonra DI ile kontrolörlere geçebilirsiniz.

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

       ...
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.