繁体   English   中英

发布具有正确转换设置的.NET Core控制台应用程序

[英]Publish a .NET Core Console application with right transformation settings

我对.NET Core应用程序还很陌生,我想知道是否有一种简单的方法可以根据配置文件部署正确的application.json。 在.NET Standard应用程序中,这非常简单,因为我们具有web.config转换/ Slowcheeta,但它似乎不适用于.NET Core Console应用程序。

我还在线阅读了有关ASP.NET Core应用程序的信息,我们可以使用

var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) <--this
.AddEnvironmentVariables();
Configuration = builder.Build();

但是在.NET Console应用程序上,我没有env.EnvironmentName

我还读到有人使用#IF-#ENDIF语句进行切换,但是如果创建了新的发布配置文件,则需要把手放在代码上

任何建议_

为了改善我由@MarkusDresch赞成的答案,我想知道OP是否仍然不能正常工作,因为他们没有设置正确的环境。 您需要正确设置此设置,例如从hostsetting.json的env变量设置:

            var host = new HostBuilder()
                   .ConfigureHostConfiguration(builder =>
                   {
                       builder.AddJsonFile("hostsettings.json", optional: true);
                   })
                   .ConfigureAppConfiguration((hostContext, builder) =>
                   {
                       builder.AddJsonFile("appsettings.json");
                       builder.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", optional: true);
                   })

在此示例中,hostsettings.json将具有以下内容:

{
  "environment": "Development",
}

您可以使用Microsoft.Extensions.Configuration.Json( https://www.nuget.org/packages/Microsoft.Extensions.Configuration.Json/

等效的代码如下所示:

var builder = new HostBuilder();

builder.ConfigureAppConfiguration((ctx, b) => b
  .AddJsonFile($"appsettings.{ctx.HostingEnvironment.EnvironmentName}.json"));

据我所知,这仅适用于.NET Core 2.1。 HostBuilder的工作原理与ASP.NET WebHostBuilder十分相似,可从NuGet包Microsoft.Extensions.Hosting中获得。

您可以尝试这样做:

public static void Main(string[] args)
{
    var environmentName = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

    var builder = new ConfigurationBuilder()
        .AddJsonFile($"appsettings.json", true, true)
        .AddJsonFile($"appsettings.{environmentName}.json", true, true)
        .AddEnvironmentVariables();
    Configuration = builder.Build();   
}

请记住有关添加Microsoft.Extensions.Configuration.Json nuget包的信息。 还有一种获取ASPNETCORE_ENVIRONMENT的方法,如下所示:

new ConfigurationBuilder().AddEnvironmentVariables()

并在那里找到该设置。

当然,您需要将这些配置复制到输出文件夹,以便可以访问其原因。

您确实有权访问环境。 那应该足够了:

var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT")}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM