首页 > 解决方案 > Visual Studio Net Core:切换多个项目的环境变量

问题描述

我们在一个解决方案中有多个项目,并且需要一种方法来快速将环境更改为另一个,例如 QA。我们的解决方案中有 8 个项目。如何做到这一点,而无需手动完成每个?

Visual Studio 中是否有快速设置?

在此处输入图像描述

注意:我们有多个 API 项目,它们没有依赖关系。

标签: c#.netvisual-studiopowershell.net-core

解决方案


解决此问题的一种方法是拥有一个解决方案级别的“环境”文本文件,每个 API 项目都可以“链接”到该文件。然后在每个 API 项目ProgramStartup逻辑中,让他们读取这个全局文件以在运行时设置环境。

例如,这是我的示例解决方案,其中包含 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。

推荐阅读