在 WPF/Wix 中配置多个环境

Configuring several environments in WPF/Wix

我有 WPF .Net Core 应用程序,我使用 Wix 创建安装程序,使用 Jenkins 作为我的 CI 工具。 现在提交后,Jenkins 构建 Wix 项目并在我需要的任何地方发送输出 .msi 文件。

在我的应用程序中,我有 appsettings.json 文件来存储我的配置。你可以猜到,我想要几个配置文件,例如appsettings.dev.json、appsettings.qa.json 用于我的开发和质量检查环境。

这样做的好方法是什么?

首先,我想通过 git 分支名称检测环境。在 Jenkins 中很容易得到这个变量,但是接下来我该怎么做呢?

第一个选项是拥有 3 个文件(每个环境一个)并在应用启动时读取配置时使用环境变量。这需要 Jenkins 将值传递给 Wix(如何?)并且 Wix 创建环境变量。我有点不喜欢那样,因为它看起来很老套。如果我错了,请纠正我。另外,我认为拥有环境变量是一种开销,因为它只被一个非常简单的桌面应用程序使用。最后一个问题,我们必须将所有 3 个文件保存在最终用户机器上。

我尝试的第二个选项是有 4 个应用程序设置文件(一个主文件和每个环境一个)。一旦 Jenkins 识别出环境,它就会用适合环境的文件替换主文件(例如 appsettings.dev.json 用于 dev 分支)。但它没有成功:主 appsettings 文件已更新,但是当我 运行 应用程序时,我看到设置没有改变。我在使用 Wix 之前检查过我是否替换了 appsettings 文件,但它没有帮助。

所以,我觉得有一个简单的配置方法,谁能给我提示?

好的,我不确定它是否是完美的解决方案,但我想出了一种方法。 基本上,我制作了一个 appsettings.json 文件,其中包含变量 env 和每个环境的一个部分。当我推送提交时 CI 将分支名称写入 env 变量并且应用程序使用称为目标分支的部分。 一般来说,它看起来像这样:

"environment": "dev",
"dev": {...},
"qa": {...}...