当前位置: 首页 > 知识库问答 >
问题:

ASP.NET .NET Core 控制台应用程序的核心配置

凤经国
2023-03-14

ASP.NETCore支持一个新的配置系统,如下所示:https://docs.asp.net/en/latest/fundamentals/configuration.html

也支持这种模式吗?NET核心控制台应用程序?

如果不是,什么是替代以前的app.configConfigurationManager模型?

共有3个答案

吕华彩
2023-03-14

如果使用<code>Microsoft.Extensions。托管(版本2.1.0)以托管您的控制台应用程序和asp。net核心应用程序,您的所有配置都注入了HostBuilderConfigureAppConfiguration 方法。下面是关于如何添加<code>appsettings的演示。json和环境变量:

    var hostBuilder = new HostBuilder()
        .ConfigureHostConfiguration(config =>
        {
            config.AddEnvironmentVariables();

            if (args != null)
            {
                // enviroment from command line
                // e.g.: dotnet run --environment "Staging"
                config.AddCommandLine(args);
            }
        })
        .ConfigureAppConfiguration((context, builder) =>
        {
            var env = context.HostingEnvironment;
            builder.SetBasePath(AppContext.BaseDirectory)
            .AddJsonFile("appsettings.json", optional: false)
            .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
            // Override config by env, using like Logging:Level or Logging__Level
            .AddEnvironmentVariables();

        })
        ... // add others, logging, services
        //;

为了编译上面的代码,你需要添加这些包:

<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.1.0" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="2.1.0" />
亢仰岳
2023-03-14

您可以使用以下代码片段。它包括配置和DI。

public class Program
{
    public static ILoggerFactory LoggerFactory;
    public static IConfigurationRoot Configuration;

    public static void Main(string[] args)
    {
        Console.OutputEncoding = Encoding.UTF8;

        string environment = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

        if (String.IsNullOrWhiteSpace(environment))
            throw new ArgumentNullException("Environment not found in ASPNETCORE_ENVIRONMENT");

        Console.WriteLine("Environment: {0}", environment);

        var services = new ServiceCollection();

        // Set up configuration sources.
        var builder = new ConfigurationBuilder()
            .SetBasePath(Path.Combine(AppContext.BaseDirectory))
            .AddJsonFile("appsettings.json", optional: true);
        if (environment == "Development")
        {

            builder
                .AddJsonFile(
                    Path.Combine(AppContext.BaseDirectory, string.Format("..{0}..{0}..{0}", Path.DirectorySeparatorChar), $"appsettings.{environment}.json"),
                    optional: true
                );
        }
        else
        {
            builder
                .AddJsonFile($"appsettings.{environment}.json", optional: false);
        }

        Configuration = builder.Build();

        LoggerFactory = new LoggerFactory()
            .AddConsole(Configuration.GetSection("Logging"))
            .AddDebug();

        services
            .AddEntityFrameworkNpgsql()
            .AddDbContext<FmDataContext>(o => o.UseNpgsql(connectionString), ServiceLifetime.Transient);

        services.AddTransient<IPackageFileService, PackageFileServiceImpl>();

        var serviceProvider = services.BuildServiceProvider();

        var packageFileService = serviceProvider.GetRequiredService<IPackageFileService>();

        ............
    }
}

哦,别忘了加上project.json

{
  "version": "1.0.0-*",
  "buildOptions": {
    "emitEntryPoint": true,
    "copyToOutput": {
      "includeFiles": [
        "appsettings.json",
        "appsettings.Integration.json",
        "appsettings.Production.json",
        "appsettings.Staging.json"
      ]
    }
  },

  "publishOptions": {
    "copyToOutput": [
      "appsettings.json",
      "appsettings.Integration.json",
      "appsettings.Production.json",
      "appsettings.Staging.json"
    ]
  },
...
}
向杜吟
2023-03-14

对于 .NET Core 2.0 控制台应用,我执行以下操作:

  1. 在项目的根目录中创建一个名为 appsettings.json 的新文件(文件名可以是任何内容)
  2. 将我的特定设置作为 json 添加到该文件中。例如:
{
  "myKey1" :  "my test value 1", 
  "myKey2" :  "my test value 2", 
  "foo" :  "bar" 
}

配置为在生成项目时将文件复制到输出目录(在VS中-

在我的项目中安装以下nuget包:

    < li >微软。extensions . configuration . JSON

将以下内容添加到Program.cs(或Main()所在的位置):

static void Main(string[] args)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(Directory.GetCurrentDirectory())
        .AddJsonFile("appsettings.json");

    var configuration = builder.Build();

    // rest of code...
}

然后使用以下方法之一读取这些值:

string myKey1 = configuration["myKey1"];
Console.WriteLine(myKey1);

string foo = configuration.GetSection("foo").Value;
Console.WriteLine(foo);

更多信息: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration?tabs=basicconfiguration#simple-configuration

 类似资料:
  • 用于控制台应用程序项目目标。NETCore1.0,我不知道如何获得一个。exe在生成过程中输出。该项目在调试中运行良好。 我已经尝试过发布这个项目,但也不起作用。这是有意义的,因为EXE文件是特定于平台的,但必须有一种方法。我的搜索只找到了对旧版本的引用。使用project的NET核心版本。json。 每当我构建或发布时,这就是我得到的全部:

  • 我试着把这个项目作为一个正常的参考。但是在重新构建解决方案之后,控制台应用程序仍然没有将.NET核心库作为参考。

  • 我正在创建一个控制台应用程序使用。NET Core 3.1和我想有一个app设置json加载所有的环境,路径,变量,...在执行开始,然后从其他库类获取值。我创建了一个设置类,其中的数据包含在应用设置json中。这是我已经在教程中找到的,但我无法获得任何价值。 因为我不知道如何初始化所有东西,所以我不能做一个正确的主。。。我错过了什么?我想我一直在为这么简单的事情兜圈子。提前谢谢!注意:我需要从另

  • 几个月前,我为控制台应用程序创建了第一个Dockerfile。这个控制台应用程序依赖于其他几个c#项目,因此它比您通常在互联网上找到的标准示例要复杂一些。Dockerfile“工作”,即我可以创建图像并运行容器。然而,我知道它有几个缺陷,现在是时候改进这个Dockerfile了。当前版本为 显然,需要解决文件的多次复制问题,但首先我想通过使用Alpine图像来减小图像大小。基于Microsoft示

  • sh wget progressbar colorama Gooey——把 CLI 程序变成 GUI

  • 问题内容: 所有, 我已经用Java编写了基于命令行的PhoneBook应用程序。该应用程序基本上会询问用户的一些详细信息,例如姓名,年龄,地址和电话号码,并将它们存储在文件中。其他操作包括按名称,电话号码等查找电话簿。所有详细信息都通过控制台输入。 我正在尝试为我已实现的每个功能编写JUnit测试用例,但无法弄清楚如何将实现代码重定向到我的JUnit测试方法中的某个东西,当我的实际代码停止供用户