c# - 已发布的控制台应用程序上没有 .NET Core 2.0 应用程序设置

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

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

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

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

  1. 发布操作(据我所知,这是为单个应用程序获取某种人工制品包的首选方式)不包含任何应用程序设置文件(ASP.NET Core 应用程序除外)。

  2. 如果我自己编写了 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/

相关文章:

c# - 这种使用通用 List 线程安全吗

.net - ASP.NET MVC 和 FubuMVC 之间的主要区别是什么?

c# - 为什么在具有两个进程和输出重定向的代码中没有捕获到 ThreadAbortException?

c++ - CoreCLR 中的 Instrumentation Profiler - 将 HelperAssembly 加载到 dotnet 进程的方法

javascript - 可以切换驱动程序但不能切换焦点

c# - getJSON 在页面刷新 (F5) 时中断。怎么修?

c# - 为什么这种扩展方法不起作用?

c# - 将所有流量转发到 http 代理(隧道)

reactjs - 401 使用react-adal 访问受Azure AD 保护的API 时出错

nginx - .Net 核心 X-Forwarded-Proto header 无法正确传递给 Nginx