我正在为我们团队的第一个.NET Core应用程序生成自动构建过程。我们的过程是在我们的构建服务器上生成一个artefact包(包含所有不同类型的应用程序,数据库迁移脚本等),然后在一个单独的步骤中将该包部署到我们拥有的各种环境(dev,test,演示,培训,现场等。)
在完整的.NET Framework应用程序中,我们使用Slow Cheetah对Windows服务和控制台应用程序等内容执行配置转换,以便在目标系统上安装应用程序时,它具有正确的配置。
现在使用.NET Core 2.0应用程序,我发现了两个问题:
发布操作(据我所知,是为单个应用程序获取某种artefact包的首选方式)并不包含任何appsettings文件(ASP.NET核心应用程序除外) )。
如果我自己编写了appsettings的副本,那么部署的版本如何知道要使用哪个appsettings..json?
事实上,除了该环境的确切设置之外,我不会部署任何其他内容。在我看来,为所有环境(或除目标环境的确切配置集之外的任何其他设置)部署设置是一个等待发生的事故。 (编辑:要强调我宁愿不在运行时合并不同的配置源,因为如果事情没有正确地试图找出实际应用的确切配置元素,那将是一个混乱的调试。 )那么,我将如何合并"主appsettings.json文件的环境特定项目?
答案 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上的配置。