Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在WPF/Wix中配置多个环境_C#_Wpf_Jenkins_.net Core_Wix - Fatal编程技术网

C# 在WPF/Wix中配置多个环境

C# 在WPF/Wix中配置多个环境,c#,wpf,jenkins,.net-core,wix,C#,Wpf,Jenkins,.net Core,Wix,我有WPF.Net核心应用程序,我使用Wix创建安装程序,使用Jenkins作为我的CI工具。 现在,在提交之后,Jenkins构建Wix项目,并将output.msi文件发送到我需要的任何地方 在我的应用程序中,我有appsettings.json文件存储我的配置。您可以猜到,我想要几个配置文件,例如appsettings.dev.json、appsettings.qa.json,用于我的开发和qa环境 这样做的好方法是什么 首先,我想通过git分支名称检测env。在Jenkins中很容易得到

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

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

这样做的好方法是什么

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

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

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


所以,我觉得有一种简单的方法可以配置它,有人能给我一个提示吗?

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

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