Ссылки на сборки .net framework в .net core 2, которые полагаются на ConfigurationManager.

У нас есть несколько устаревших библиотек классов 4.5.2, которые часто используют ConfigurationManager.AppSettings[key].

Можно ли ссылаться на них в приложении .net core 2, чтобы конфигурация была правильно исправлена ​​под капотом? т.е. старые вызовы в ConfigurationManager.AppSettings[key] правильно читают конфигурацию из json или xml, но в приложении .netcore2.

Если я переношу вопрос keys в appSettings.json, то вызов в ConfigurationManager.AppSettings всегда возвращает значение null.

Примером может быть:

{
"Logging": {
    "IncludeScopes": false,
    "Debug": {
        "LogLevel": {
            "Default": "Warning"
        }
    },
    "Console": {
        "LogLevel": {
            "Default": "Warning"
        }
    }
},
"appSettings": {"test": "bo"},
"test": "hi"
}

А потом:

[HttpGet]
public IEnumerable<string> Get()
{
    return new string[] { "value1", "value2", ConfigurationManager.AppSettings["test"] , ConfigurationManager.AppSettings["appSettings:test"] };
}

Будет отображаться:

["value1","value2",null,null]

person boro2g    schedule 01.09.2017    source источник
comment
Я согласен, что это не тот способ, которым конфигурация должна обрабатываться в .netcore2, однако я пытался оценить, какая часть устаревшей кодовой базы будет работать без изменений.   -  person boro2g    schedule 01.09.2017
comment
Вы решили это?   -  person Olaj    schedule 31.05.2018
comment
Нет, нам еще предстоит перейти на .net core для этих проектов.   -  person boro2g    schedule 01.06.2018
comment
Это может помочь stackoverflow.com/questions/50258251/   -  person ATerry    schedule 01.06.2018
comment
@ATerry Разве для этого не потребуется обновить проект .NET 4.5.2 до .NET 4.6.1, поскольку 4.5.x несовместим с .NET Core/Standard 2?   -  person pfx    schedule 01.06.2018


Ответы (1)


Настройка, которую вы ищете, возможна, и настройки могут быть сохранены как есть в app.config.

У меня есть библиотека классов .NET 4.5.2 "MyLibrary" и веб-приложение .NET Core 2.0 "WebApp", ссылающееся на полную инфраструктуру .NET 4.6.1.

Моя библиотека

  • имеет ссылку на сборку на System.Configuration
  • имеет class Foo, который читает настройки приложения с ключом foo

Веб-приложение

  • имеет ссылку проекта на MyLibrary
  • имеет ссылку на сборку на System.Configuration
  • имеет файл app.config, содержащий раздел appSettings. (App.config по умолчанию присутствует в проекте веб-приложения .NET Core 2.0.)
  • использует в экземпляре Foo, вызывает свой метод GetSomething, с помощью которого значение bar присваивается переменной something.

Все остальные файлы и настройки по умолчанию. Ниже приведены те, о которых говорилось выше.


Моя библиотека проект

.NET 4.5.2

Foo.cs

using System;
using System.Configuration;

namespace PFX
{
    public class Foo
    {
        public String GetSomething()
        {
            String r = ConfigurationManager.AppSettings["foo"];
            return r;
        }
    }
}

Проект веб-приложения

.NET Core 2.0.1 со ссылкой на полную платформу .NET Framework 4.6.1.

WebApp.csproj

<Project Sdk="Microsoft.NET.Sdk.Web">    
    <PropertyGroup>
        <TargetFramework>net461</TargetFramework>
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore" Version="2.0.3" />
        <PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.0.4" />
        <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.ViewCompilation" Version="2.0.4" PrivateAssets="All" />
        <PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.3" />
        <PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="2.0.3" />
    </ItemGroup>

    <ItemGroup>
        <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.4" />
     </ItemGroup>

     <ItemGroup>
        <ProjectReference Include="..\MyLibrary\MyLibrary.csproj" />
     </ItemGroup>

    <ItemGroup>
        <Reference Include="System.Configuration" />
    </ItemGroup>    
</Project>

App.config

<configuration>
    <runtime>
       <gcServer enabled="true"/>
    </runtime>

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

Program.cs

using System;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;

namespace WebApp
{
    public class Program
    {
        public static void Main(string[] args)
        {
            PFX.Foo foo = new PFX.Foo();
            String someting = foo.GetSomething(); // bar

            BuildWebHost(args).Run();
        }

        public static IWebHost BuildWebHost(String[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>()
                .Build();
    }
}
person pfx    schedule 01.06.2018