C# 移动到nuget包后获取环境变量的不同行为

C# 移动到nuget包后获取环境变量的不同行为,c#,.net-core,C#,.net Core,我有一种在申请表中无法解释的行为 我有一个共同的图书馆,我;我在多个项目中使用过。在这个库中,我使用System.Environment类访问环境变量,如下所示 string value = System.Environment.GetEnvironmentVariable("MY_ENV_VARIABLE"); 我决定为这个共享库创建一个nuget包,在将引用移动到nuget后,值不再设置,就好像搜索的env_变量不存在一样 在asp.net核心项目中,我正在设置环境变

我有一种在申请表中无法解释的行为

我有一个共同的图书馆,我;我在多个项目中使用过。在这个库中,我使用System.Environment类访问环境变量,如下所示

 string value = System.Environment.GetEnvironmentVariable("MY_ENV_VARIABLE");
我决定为这个共享库创建一个nuget包,在将引用移动到nuget后,
不再设置,就好像搜索的env_变量不存在一样

在asp.net核心项目中,我正在设置环境变量

launch.json=>

 "environmentVariables": {
    "MY_ENV_VARIABLE": "my value"
  },

为什么会有这种行为?切换回直接引用项目,EverythSign工作。

在我写了评论之后,我意识到我忘记在操作系统级别为控制台项目设置正确的环境变量。我设置了
ASPNETCORE\u环境
,但没有设置
DOTNET\u环境
。调试过程中一切正常,但有一次我试着运行发布的可执行文件-boom

我想我需要写这封信,这样我就不会再忘记了

短版

launch.json
仅在调试期间使用。确保在顶级项目的
launch.json
中设置了环境变量。如果要在Visual Studio之外使用eg开发设置启动应用程序,则需要在操作系统级别设置
DOTNET_环境
。对于任何其他环境变量也是如此

解释

环境变量由OS环境提供,它们不是从launch.json读取的。无论代码在哪里,访问它们都不会改变。如果无法读取所需的环境变量,则表示未设置该变量


环境变量通常在操作系统级别设置(在所有操作系统中)。也可以在批处理/外壳文件中临时设置它们。父应用程序还可以在启动子进程时设置子进程使用的环境变量。这就是
launch.json
的用途

VisualStudio和VisualStudio代码使用它来存储调试概要文件、设置以及它们仅在开始调试主可执行文件时设置的环境变量。它根本不用于生产。如果调试期间出现问题,请确保在ASP.NET核心项目的launch.json中设置了环境变量。更好的是,使用项目的
设置>调试
页面设置它们,以确保为正确的配置文件设置它们

生产/测试/分期

在生产中,您需要在操作系统中设置环境变量

如果使用IIS,还可以在用于配置主机的
web.config
文件中设置它们。这将允许您在具有不同设置的同一台计算机上部署同一应用程序两次,例如用于测试和暂存。您还可以通过为每个站点使用不同的基本设置,将其用于多租户部署


如果使用容器,还可以在容器级别设置环境变量。这允许您在启动容器时使用具有不同设置的同一映像,甚至可以部署新设置

在我写下注释后,我意识到我忘记在操作系统级别为控制台项目设置正确的环境变量。我设置了
ASPNETCORE\u环境
,但没有设置
DOTNET\u环境
。调试过程中一切正常,但有一次我试着运行发布的可执行文件-boom

我想我需要写这封信,这样我就不会再忘记了

短版

launch.json
仅在调试期间使用。确保在顶级项目的
launch.json
中设置了环境变量。如果要在Visual Studio之外使用eg开发设置启动应用程序,则需要在操作系统级别设置
DOTNET_环境
。对于任何其他环境变量也是如此

解释

环境变量由OS环境提供,它们不是从launch.json读取的。无论代码在哪里,访问它们都不会改变。如果无法读取所需的环境变量,则表示未设置该变量


环境变量通常在操作系统级别设置(在所有操作系统中)。也可以在批处理/外壳文件中临时设置它们。父应用程序还可以在启动子进程时设置子进程使用的环境变量。这就是
launch.json
的用途

VisualStudio和VisualStudio代码使用它来存储调试概要文件、设置以及它们仅在开始调试主可执行文件时设置的环境变量。它根本不用于生产。如果调试期间出现问题,请确保在ASP.NET核心项目的launch.json中设置了环境变量。更好的是,使用项目的
设置>调试
页面设置它们,以确保为正确的配置文件设置它们

生产/测试/分期

在生产中,您需要在操作系统中设置环境变量

如果使用IIS,还可以在用于配置主机的
web.config
文件中设置它们。这将允许您在具有不同设置的同一台计算机上部署同一应用程序两次,例如用于测试和暂存。您还可以通过为每个站点使用不同的基本设置,将其用于多租户部署


如果使用容器,还可以在容器级别设置环境变量。这允许您在启动容器时使用具有不同设置的相同映像,甚至部署新设置

环境变量是环境变量,而不是从
launch.json
读取的内容。无论代码在哪里,访问它们都不会改变。在您尝试的机器上是否设置了环境变量?你真的在Windows中设置了吗?如果打开控制台并键入
SET
是否看到它们?
launch.json
由Visual Studio/code t使用