我有一个方法,读取设置从我的配置文件像这样:

var value = ConfigurationManager.AppSettings[key];

它在仅针对. net标准2.0时编译良好。

现在我需要多个目标,所以我更新了我的项目文件:

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

但是现在,netcoreapp2.0的编译失败,并出现以下错误消息:

名称“ConfigurationManager”在当前上下文中不存在(netcoreapp2.0)

另外,我创建了一个新的。net Core 2.0控制台应用程序(这次只针对。net Core 2.0),但同样地,在命名空间System.Configuration下似乎没有ConfigurationManager。

我很困惑,因为它在。net标准2.0下可用,所以我希望它在。net核心2.0中可用,因为。net核心2.0是。net标准2.0兼容的。

我错过了什么?


当前回答

您可以使用配置来解决这个问题。

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

       ...
    }

其他回答

您可以使用配置来解决这个问题。

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

       ...
    }

是的,ConfigurationManager。在引用NuGet包System.Configuration.ConfigurationManager后,可以在. net Core 2.0中使用AppSettings。

感谢@JeroenMostert给我的解决方案。

我知道现在有点晚了,但也许有人正在寻找一种简单的方法来访问。net core app中的appsettings。 在API构造函数中添加以下内容:

public class TargetClassController : ControllerBase
{
    private readonly IConfiguration _config;

    public TargetClassController(IConfiguration config)
    {
        _config = config;
    }

    [HttpGet("{id:int}")]
    public async Task<ActionResult<DTOResponse>> Get(int id)
    {
        var config = _config["YourKeySection:key"];
    }
}

一旦你有包设置,你需要创建一个app.config或web。配置并添加如下内容:

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

我使用下面的代码示例。而且这是非常方便的方式。

using Microsoft.Extensions.Configuration;
using System.IO;

namespace DemoWeppApp
{
    public static class StaticConfigurationManager
    {
        public static IConfiguration AppSetting { get; }
        static StaticConfigurationManager()
        {
            AppSetting = new ConfigurationBuilder()
                    .SetBasePath(Directory.GetCurrentDirectory())
                    .AddJsonFile("appsettings.json")
                    .Build();
        }
    }
}

我可以在任何静态类中使用

StaticConfigurationManager.AppSetting["conf_name"];