【问题标题】:error in Microsoft.Extensions.ConfigurationMicrosoft.Extensions.Configuration 中的错误
【发布时间】:2022-01-23 02:44:48
【问题描述】:

正在尝试遵循此处的控制台应用教程https://www.connectionstrings.com/store-and-read-connection-string-in-appsettings-json/

所以在我的 appsettings-json 中有:

{
  "ConnectionStrings": {
    "myDb1": "Server=myServer;Database=myDb1;Trusted_Connection=True;",
  }
}

我的程序:

using System;
using Microsoft.Extensions.Configuration;

namespace mynamespace 
{
    class Program
    {
        string myDb1ConnectionString = _configuration.GetConnectionString("myDb1");

        static void Main(string[] args)
        {
            ... 
        }
    }
}

我得到的错误是:“名称'_configuration'在当前上下文中不存在”。

【问题讨论】:

  • 无论如何,这不是一个教程。它假定您已经有一个工作的、已配置的 .NET 应用程序,并且只想从配置中读取一个字符串。在 .NET 6 项目中,您根本无法使用此类代码,因为 Configuration 可通过宿主对象获得。您正在构建什么样的应用程序?网络应用?控制台应用程序?哪个 .NET 版本?
  • 您需要创建一个ConfigurationBuilder,从Microsoft.Extensions.Configuration.Json 加载扩展名为AddJsonFile 的文件appsettings.json,然后在ConfigurationBuilder 上调用Build()。然后你有一个Configuration 对象,你可以从中加载连接字符串。
  • @Hazrelle 在 .NET Core 3 和之后的版本中简单地创建一个通用主机来处理所有这些。
  • 查看Configuration in .NET 了解配置的真正工作原理。
  • 是@PanagiotisKanavos,但没有指定主机,OP 可能想要手动执行。在 .NET 6 中,最小的控制台应用程序没有主机。

标签: c# .net-core


【解决方案1】:

您链接到的页面不是教程,它仅显示如何从任何配置提供程序读取连接字符串,而不仅仅是 appsettings.json。它假定您已经构建了一个配置对象。 .NET (Core) 5 和 6 使用更简单的代码。

查看Configuration in .NET 以了解配置的真正工作原理。您可以在Configuration in ASP.NET Core中找到有关各种配置提供程序、它们的使用方式以及如何创建自己的更多详细信息

使用通用主机

在当前的长期版本 .NET 6 中,需要一个最小的应用程序:

using Microsoft.Extensions.Hosting;

using IHost host = Host.CreateDefaultBuilder(args).Build();


var configuration=host.Services.GetRequiredService<IConfiguration>();

var connectionString=configuration.GetConnectionString("blahblah");

...

正如文档所解释的,CreateDefaultBuilder 将从任何 appsettings.json 文件、环境变量和命令行参数中加载配置设置。

这意味着您可以通过使用环境变量或 CLI 参数指定新值来覆盖存储在 JSON 文件中的设置,例如:

dotnet run /ConnectionStrings:blahblah="......."

没有通用主机

您可以使用 ConfigurationBuilder 只创建配置对象:

IConfiguration config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .AddEnvironmentVariables()
    .AddCommandLine(args)
    .Build();

var connectionString=configuration.GetConnectionString("blahblah");

【讨论】:

    猜你喜欢
    • 2021-07-21
    • 2016-05-24
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    • 2017-05-06
    • 2019-02-08
    • 2018-10-13
    • 1970-01-01
    相关资源
    最近更新 更多