我正在为我们团队的第一个 .NET Core 应用程序生成一个自动化构建过程。我们的过程是在我们的构建服务器上生成一个人工制品包(包含所有不同类型的应用程序、数据库迁移脚本等),然后在一个单独的步骤中将该包部署到我们拥有的各种环境(开发、测试、演示、培训、直播等)
在完整的 .NET Framework 应用程序中,我们使用 Slow Cheetah 对 Windows 服务和控制台应用程序等执行配置转换,以便在目标系统上安装应用程序时它具有正确的配置。
现在,对于 .NET Core 2.0 应用程序,我发现了两个问题:
发布操作(据我所知,这是为单个应用程序获取某种人工制品包的首选方式)不包含任何应用程序设置文件(ASP.NET Core 应用程序除外)。
如果我自己编写了 appsettings 副本的脚本,部署的版本如何知道要使用哪个 appsettings..json?
事实上,除了该环境的确切设置外,我宁愿不部署任何东西。在我看来,为所有环境部署设置(或为目标环境设置的确切配置以外的任何设置)是一个等待发生的意外。 (编辑:要强调的是,我宁愿不在运行时合并不同的配置源,因为如果事情不正常,试图弄清楚实际应用了哪个配置元素,调试起来会很麻烦。) 那么,我如何将特定于环境的项目与主 appsettings.json 文件“合并”?
最佳答案
要使发布操作包含要输出的 appsettings.json 文件,您需要将以下内容添加到您的 .csproj 文件中:
<ItemGroup>
<None Include="appsettings.json" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
出于安全原因,建议不要在您的存储库中进行生产设置。
更好的选择是为部署到的应用程序提供生产配置。例如,如果将其部署为 Windows 服务,则可以通过环境变量或命令行参数来完成。
代码如下所示:
var configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddEnvironmentVariables()
.AddCommandLine(args)
.Build();
So, how would I "merge" the environment specific items with the main appsettings.json file?
Octopus Deploy 可以在部署过程中为您修改 appsettings.json https://octopus.com/docs/deploying-applications/deploying-asp.net-core-web-applications/json-configuration-variables-feature .这实际上就是我们最终进入我的团队的方式。
您还可以编写一些自定义脚本来合并 CI 上的配置。
关于c# - 已发布的控制台应用程序上没有 .NET Core 2.0 应用程序设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48225940/