質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.42%

Q&A

解決済

2回答

9861閲覧

VSCodeでのlaunch.jsonで自作(?)の環境変数を使う方法

BeatStar

総合スコア4958

0グッド

1クリップ

投稿2021/10/19 07:48

概要: VSCodeでのlaunch.jsonで自作(?)の環境変数を使いたい

VSCode上でC#(.NET5)を試しています。(VSCodeの使い方も学ぶ意図もあり)

launch.jsonやtasks.jsonを(VSCode側が)生成し、この中に『変数』を追加できないでしょうか?

やりたいことは、launch.json内の"program"の'${workspaceFolder}/bin/Debug/(target-framework)/(project-name.dll)'の
target-framework等の部分を書き換えるために、変数(厳密には環境変数でしょうけど)として
TARGETFRAMEWORK等のように定義しておいて、

"program": "${workspaceFolder}/bin/Debug/${TARGETFRAMEWORK}/main.dll"

のように変数を組み込みたいのです。これができれば、バージョンが上がってもできますし。

『VSCode C# launch.json 変数 定義』等で調べても、VS Codeの設定をキレイに変数置換【VS Code使い方①】のように『すでに用意されている環境変数』とかしかありません。

さらに潜っても、本家と後どこだったか忘れましたが、

"configurations": [ { "env": { "TARGETFRAMEWORK1": "net5.0" }, ... (ここで ${env:TARGETFRAMEWORK1" のようにしてアクセス) } }

のようなものしかありませんでした。

ですが、

{ // IntelliSense を使用して利用可能な属性を学べます。 // 既存の属性の説明をホバーして表示します。 // 詳細情報は次を確認してください: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (console)", "type": "coreclr", "request": "launch", "WARNING01": "*********************************************************************************", "WARNING02": "The C# extension was unable to automatically decode projects in the current", "WARNING03": "workspace to create a runnable launch.json file. A template launch.json file has", "WARNING04": "been created as a placeholder.", "WARNING05": "", "WARNING06": "If OmniSharp is currently unable to load your project, you can attempt to resolve", "WARNING07": "this by restoring any missing project dependencies (example: run 'dotnet restore')", "WARNING08": "and by fixing any reported errors from building the projects in your workspace.", "WARNING09": "If this allows OmniSharp to now load your project then --", "WARNING10": " * Delete this file", "WARNING11": " * Open the Visual Studio Code command palette (View->Command Palette)", "WARNING12": " * run the command: '.NET: Generate Assets for Build and Debug'.", "WARNING13": "", "WARNING14": "If your project requires a more complex launch configuration, you may wish to delete", "WARNING15": "this configuration and pick a different template using the 'Add Configuration...'", "WARNING16": "button at the bottom of this file.", "WARNING17": "*********************************************************************************", "env": { "TARGETFRAMEWORK1": "net5.0" }, "preLaunchTask": "build", "program": "${workspaceFolder}/bin/Debug/${env:TARGETFRAMEWORK1}/ConsoleType.dll", "args": [], "cwd": "${workspaceFolder}", "console": "internalConsole", "stopAtEntry": false }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach" } ] }

のようにやってみましたが、なぜか${env:TARGETFRAMEWORK1}の値が、空の状態になっているようです。

[エラーメッセージ] launch: プログラム'(省略)\bin\Debug\ConsoleType.dll'が存在していません

メッセージの意味は理解していますが、では、どのようにすれば上記でいう TARGETFRAMEWORK1 に相当する環境変数を使うことができるでしょうか。
もしこれができるのなら、やりようによってはできる範囲が広がるので。

では

Windows(およびおそらくLinux)の環境変数に問題があるようです。 OS Xで動作します。調査中です。すぐに修正される予定です。

(アンドレ・ヴァイナンドさんの回答)

とありますが、その回答は2015年のものなのでさすがに改善されているかと思うのですが。

[情報]
OS: Windows10
VSCode: VSCode 1.60.2 (Portableモード)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Crimson_Tide

2021/10/19 09:12

launcj.json内での "env": {}の設定は、実行したプログラムに渡す環境設定を設定するもののように思われます。 Javaですが、プログラム内で"env": {}で設定した環境変数を参照することができました。 一方でlaunch.json内で${env:TARGETFRAMEWORK1}と使いたい場合は、OSの環境変数でTARGETFRAMEWORK1を設定すれば使えるようです。 ※ユーザー環境変数に新規で設定した変数を、プログラムの引数として指定しただけですがlaunch.json内で${env:変数名}が展開されました。
BeatStar

2021/10/19 11:56 編集

@ Crimson_Tideさん ありがとうございます。確かにコマンドプロンプトなりOS側なりで環境設定するとできました。 (私がなんか勘違いしていたようです)
Crimson_Tide

2021/10/19 12:03

申し訳ありません、Portableモードは利用したことがないのでわかりかねます。 OSの環境変数を変えずにということかと思いますが、TakaiYさんの回答がBAとなっているようですので、Portableモードでも回答内容で解決できたものと想像致します。
BeatStar

2021/10/19 12:08

@ Crimson_Tideさん 返信ありがとうございます。 Portableモード云々というより、『USBメモリ等に入れて持ち運ぶ際、毎回OSに環境設定するのが面倒なのでjsonファイル周辺でごにょごにょできないか』という意味でした。 伝わりづらくて済みません… Crimson_Tideさんによる補足を、返信後に気づき、試したところ、上手く作動しました。 なので、Portableモードでも使えるようです。 ありがとうございます。
guest

回答2

0

ほぼ方向性はTakaiYさんの回答(及びCrimson_Tideさんの補足)で解決しました。

単純に、".vscode"ディレクトリ内にsettings.jsonを作り、その中に

{ "TARGETFRAMEWORK": "net5.0" }

と書いて、launch.jsonからは、

"program": "${workspaceFolder}/bin/Debug/${config:TargetFramework}/ConsoleType.dll",

のように"config:"を付けてアクセスできるようです。

(この内容はCrimson_Tideさんによる補足と同じですが、見落とす可能性があるのでここに書いています)

投稿2021/10/19 11:55

BeatStar

総合スコア4958

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

launch.jsonもtasks.jsonもいろいろな変数が使えます。

環境変数 であれば、${env:Name}という書式です。

vscodeのコンフィグからも、${config:Name}こういう形でひっぱってこれます。

全般的な説明はここです。

投稿2021/10/19 08:35

TakaiY

総合スコア13096

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Crimson_Tide

2021/10/22 03:58 編集

補足させていただきます。 ${config:Name}を使って個人で設定した変数として参照するのが本来の使い方かは私はわかりませんが、 launch.jsonと同じフォルダにsettings.json(※setting.jsonからsettings.jsonに修正)を作成し、 { "user.env.test_folder":"env_test_folder" } launch.jsonからは 下記のような形で参照できると思います。 "${config:user.env.test_folder}", 設定ファイルは、VSCode全体(User Settings)の設定とは別に、任意でワークスペース単位,フォルダ単位で作成できます。 https://code.visualstudio.com/docs/getstarted/settings VSCode全体(User Settings)の設定に上記のように変数を設定しても参照することができました。 ただ今回のようなケースではlaunch.jsonと同じフォルダの設定もしくはワークスペースの設定に記述するのが適切と想像します。 上記の"user.env.test_folder"は適当につけただけですが、既存の設定項目と被らないものにする必要があると思います。 各settings.json(※setting.jsonからsettings.jsonに修正)へのアクセスは、ファイル-[ユーザー設定]-[設定]を開いて 設定の検索の下部の[ユーザー(VSCode全体の設定)]「ワークスペース」[○○フォルダ]を選択して、右上のフォルダを開くようなアイコン(カーソルを当てると設定(JSON)を開く)クリックでVSCode内で開くことができます。 ([○○フォルダ]は場合によっては表示されていないかもしれません。) ワークスペースの設定に設定する場合は、"settings": {}の中に記述します。 "settings": { "user.env.workspacesetting":"workspacesetting env" },
BeatStar

2021/10/19 11:49

@ TakaiYさん ご回答ありがとうございます。私がなんか勘違いしていたっぽいです。 > vscodeのコンフィグからも、 の部分と、Crimson_Tideさんの補足によって、解決出来ました! ありがとうございます。
Crimson_Tide

2021/10/22 03:59

すみません、setting.jsonと記述していましたが誤りでした。正しくはsettings.jsonでした。 上記補足内説明修正しております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.42%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問