我如何添加环境变量启动。VSCode中的json

在node.js项目中使用新的VSCode编辑器。我试图通过编辑启动来配置我的“启动”配置文件进行调试。json文件。我需要设置一个connectionstring作为环境变量。根据发布会上的评论。json文件:

// Environment variables passed to the program.
"env": { }

我尝试像这样添加环境变量:

"env":
{
"CONNECTION_STRING": "Data Source=server;Initial Catalog=catalog;User ID=uid;Password=pwd;MultipleActiveResultSets=true"
}

这导致错误时,我试图启动我的应用程序;“OpenDebug进程意外终止”。我还没有找到任何日志文件等,可以解释什么是问题。

当我设置环境变量并从标准命令提示符启动我的应用程序时,我知道这个应用程序可以正确工作。如果我在启动时注释掉我的变量,应用程序也会按预期运行。json文件;我无法连接数据库。

我假设我在发布中使用了错误的格式。json文件,但我还没有找到任何方法,使此工作。

什么好主意吗?

218840 次浏览

Windows上的环境变量似乎有问题(可能在linux上也是如此)。它在OS x上运行,我们正在调查。预计很快就会修复。

更新(2015年6月2日): Visual Studio Code 0.3.0包含对此的修复。

作为一种变通方法,你可以在启动VSCode时设置环境变量,例如,使用这个小powershell脚本:

param(
$vars = @{}
)


$vars.Keys | % {
write-host "adding env variable: $_=$($vars[$_])"
[Environment]::SetEnvironmentVariable($_, $vars[$_], "Process")
}
$ver = "0.1.0"
& "$env:LOCALAPPDATA\Code\app-$ver\Code.exe"

保存为vscode.ps1并从命令行调用它,如下所示:

powershell ".\vscode.ps1 -vars @{ 'NODE_ENV'='test'; 'SOMETHING'='else' }"

我使用launch.json中的env属性成功地传递了它们:

{
"version": "0.2.0",
"configurations": [
{
"type": "pwa-node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}/index.js",
"env": {
"TEST_VAR": "foo"
}
}
]
}

像这样,在你的操作系统下:

        "osx": {
"MIMode": "lldb",
"environment": [{"name": "DYLD_LIBRATY_PATH", "value": "/Users/x/boost_1_63_0/stage/lib/"}]
},

从2016年底开始,你还可以使用envFile 用于Node.js项目:

VS Code Node调试器现在支持从文件中加载环境变量,并将它们传递给节点运行时。https://github.com/Microsoft/vscode/issues/15964

另见:从外部文件(节点)加载环境变量:

要使用这个特性,在你的启动配置中添加一个属性envFile,并指定包含环境变量的文件的绝对路径:

Asp。核心项目,这个功能本机不支持由vscode,但它已经最近被添加到omnissharp vscode扩展。该功能自2018年9月10日起通过v1.16.0提供。

作为参考,我在另一种语言中遇到了类似的问题(在2020年,在上面接受的答案中提到的错误被修复很久之后),我想指出一些事情:

根据启动配置上的微软的文档,许多常见选项,包括"env",并不是所有不同调试/运行环境的requried特性——也就是说,在我看来,并不是VS Code“提供”了环境变量的选项,而是选择了特定的调试器扩展来实现这个特性。因此,要么

  • 调试应用程序意外崩溃
  • 警告Property "env" is not allowed

可能是因为您正在使用的特定语言/调试器不支持或没有实现对环境变量的处理。

正如qbiq所说,如果环境变量在启动过程中不会发生变化,可能有一个快速的解决方法,那就是将它们导出,并使用这个特定的变量集运行VS Code。

我也有同样的问题,原来我在我的项目根中有一个.env文件,它覆盖了launch.json设置。我已经警告过你了。 :) < / p >

这是可行的

enter image description here

只需添加以下内容

< p > < >强“env”:{ “NODE_ENV”:“发展” } < /强> < / p >
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program", //TODO: cmd as launch program
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}\\index.js",
"env": {
"NODE_ENV": "development"
}
}
]

在2020年6月,这仍然非常具有误导性,并在OSX卡特琳娜10.15.5上被打破。我使用VSCode内部CodeLLDB扩展版本1.5.3:

Version: 1.47.0-insider
Commit: 0913b1aa43191d8af0ccb4a133d9a8d7c1a81d69
Date: 2020-06-23T09:38:28.751Z (1 day ago)
Electron: 8.3.3
Chrome: 80.0.3987.165
Node.js: 12.13.0
V8: 8.0.426.27-electron.0
OS: Darwin x64 19.5.0

当在launch.json上使用env关键字启动调试器时,我得到了这样的结果:

enter image description here

因此,简单地说,在launch.json中使用"env"指令将在屏幕截图中显示消息。这将阻止运行调试器,令人惊讶的缺乏功能,但足够公平。

但是,使用environment而不是env,不会弹出错误消息,环境变量在正在调试的运行时不可用,因此getenv(whatever)不会返回该键的实际值:-!

版本1.49.1

你可以在启动时使用env属性来添加env变量。或使用envFile属性,其值为你的.env文件的位置。

警告:如果你已经有一个。env文件,它会自动包含它。(根据denislexic评论)

env的例子:

{
...
"env": { "PORT": "4000" }
...
}

envFile例子:

{
...
"envFile": "${workspaceFolder}/server/.env",
...
}
它为我的django项目工作,使用envFile变量。 你可以签出这个链接:https://code.visualstudio.com/docs/editor/debugging

{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Django",
"type": "python",
"request": "launch",
"program": "${workspaceFolder}/project/manage.py",
"args": [
"runserver"
],
"django": true,
"envFile": "${workspaceFolder}/project/Server/settings/local.env"
}
]
}