启动后在C#中重新加载环境变量

Mot*_*tor 3 .net c# build-automation environment-variables

我们收到了一个新的代码库,它使用了整个地方的环境变量.他们指向项目根,资产,不同工具等等.不是最理想的情况,但它的工作原理.但是,当需要尝试运行我们的自动构建时,它就变成了巨大的痛苦.

Windows似乎在创建进程时实例化环境变量,并且不会再次刷新这些值.我们希望能够让我们的自动构建系统运行一个项目列表并按顺序构建每个项目.这需要调用更改这些值的项目切换器.完成此操作后,更改不会反映在当前正在运行的构建过程中.

有没有人知道任何C#命令/函数/等可用于在调用项目切换器后强制环境变量重新加载?

Jef*_*ffH 7

System.Environment.GetEnvironmentVariableSystem.Environment.GetEnvironmentVariable有重载检索:

...来自当前进程或当前用户或本地计算机的Windows操作系统注册表项的环境变量的值.

如果您的更改影响了指定区域中的注册表,则这可能对您有用.


Gui*_*que 2

如果您要打开命令提示符 (cmd.exe),然后更改环境变量,则 cmd.exe 的该实例将看不到这些更改。如果您要打开 cmd.exe 的新实例,该实例将看到新的更改。(前提是您更改了用户环境变量而不是系统环境变量)。

我不知道如何在.NET 中模仿这个。您可以尝试创建一个新的 AppDomain 并查看是否有效。

如果没有,您可以尝试通过启动新进程来创建程序集的新实例,看看会发生什么情况。在您的情况下,这可能意味着您必须更改自动构建系统才能将新项目的构建作为新流程进行触发。

我知道这些不是直接的答案,但也许它们可以让您了解如何继续。