已发布的控制台应用程序上没有.NET Core 2.0 appsettings

时间:2018-01-12 12:02:52

标签: c# .net .net-core console-application

我正在为我们团队的第一个.NET Core应用程序生成自动构建过程。我们的过程是在我们的构建服务器上生成一个artefact包(包含所有不同类型的应用程序,数据库迁移脚本等),然后在一个单独的步骤中将该包部署到我们拥有的各种环境(dev,test,演示,培训,现场等。)

在完整的.NET Framework应用程序中,我们使用Slow Cheetah对Windows服务和控制台应用程序等内容执行配置转换,以便在目标系统上安装应用程序时,它具有正确的配置。

现在使用.NET Core 2.0应用程序,我发现了两个问题:

  1. 发布操作(据我所知,是为单个应用程序获取某种artefact包的首选方式)并不包含任何appsettings文件(ASP.NET核心应用程序除外) )。

  2. 如果我自己编写了appsettings的副本,那么部署的版本如何知道要使用哪个appsettings..json?

  3. 事实上,除了该环境的确切设置之外,我不会部署任何其他内容。在我看来,为所有环境(或除目标环境的确切配置集之外的任何其他设置)部署设置是一个等待发生的事故。 (编辑:要强调我宁愿不在运行时合并不同的配置源,因为如果事情没有正确地试图找出实际应用的确切配置元素,那将是一个混乱的调试。 )那么,我将如何合并"主appsettings.json文件的环境特定项目?

1 个答案:

答案 0 :(得分:3)

要使发布操作包含appsettings.json文件输出,您需要在.csproj文件中添加以下内容:

<ItemGroup>
  <None Include="appsettings.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

出于安全原因,建议不要在存储库中安装生产设置。

更好的选择是为部署它的应用程序提供生产配置。如果将其部署为Windows服务,则可以通过环境变量或命令行参数来完成。

代码如下:

var configuration = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json")
    .AddEnvironmentVariables()
    .AddCommandLine(args)
    .Build();
  

那么,我将如何合并&#34;主appsettings.json文件的环境特定项目?

Octopus Deploy可以在部署过程https://octopus.com/docs/deploying-applications/deploying-asp.net-core-web-applications/json-configuration-variables-feature中为您修改appsettings.json。这实际上是我们在团队中的最终结果。

此外,您可以编写一些自定义脚本来合并CI上的配置。