c# - Visual Studio Net Core:切换多个项目的环境变量
问题描述
我们在一个解决方案中有多个项目,并且需要一种方法来快速将环境更改为另一个,例如 QA。我们的解决方案中有 8 个项目。如何做到这一点,而无需手动完成每个?
Visual Studio 中是否有快速设置?
注意:我们有多个 API 项目,它们没有依赖关系。
解决方案
解决此问题的一种方法是拥有一个解决方案级别的“环境”文本文件,每个 API 项目都可以“链接”到该文件。然后在每个 API 项目Program
或Startup
逻辑中,让他们读取这个全局文件以在运行时设置环境。
例如,这是我的示例解决方案,其中包含 2 个 API 项目:
第 1 步:创建“全局”环境文件
首先,我添加了一个解决方案级别的文本文件Environment.txt
,它只包含我希望在下面运行所有 API 的“当前”环境的名称:
Performance
第 2 步:将 Environment.txt 文件链接到每个 API 项目
其次是将文件链接到Environment.txt
每个 API 项目,使用 Visual Studio 的Add Existing Item
对话框,然后选择Add As Link
选项:
请注意,链接文件上的图标与普通文件略有不同。
第 3 步:确保 Environment.txt 实际上被复制到 Bin 目录
第三是确保每个添加的链接文件的Copy to Output
选项设置为Copy Always
:
第 4 步:一小段代码……
最后,在每个 API 项目的Program.cs
文件中,您可以读取该文件并在运行时设置环境:
namespace MicroserviceSandbox.ApiTwo
{
using System.IO;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Hosting;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
// *** Dynamically set the environment.
var binDirectoryPath = new FileInfo(typeof(Program).Assembly.Location).Directory.FullName;
var environmentFilePath = Path.Combine(binDirectoryPath, "Environment.txt");
var environment = File.ReadAllText(environmentFilePath);
webBuilder.UseEnvironment(environment);
// ***
webBuilder.UseStartup<Startup>();
});
}
}
}
假设
- 上面的 C# 代码片段假定您的 API 项目使用的是 ASP.NET Core v3.1。
推荐阅读
- java - JavaFX 自定义 ListView 单元格
- .net - 从程序集或模块“System.ComponentModel.Primitives.dll”导入类型“ISupportInitialize”的 VB.NET 失败
- math - 如何在给定三点之间距离的 xy axys 元素位置中表示?
- wso2 - 将 API Manager 与 Business Process Server (BPM) 连接时出错
- apache-kafka - 偏移提交在 kafka 0.10.2.2 中失败
- objectbox - box.removeAll 和订阅
- r - 在具有字符串列表的多个数据帧上使用 for 循环
- php - 从 HTML 表单接收的数组元素与表的 MySQL 列中的数组项的映射
- angular - Angular 9.1.x,数百条路线运行良好,少一条
- r - 使用 ARIMA 预测小数点