【Windows10】VisualStudioなしで超絶簡単にC#・VB.NETコマンドライン開発環境を作る

#TL;DR
コマンドラインツールを作る程度ならVisualStudioはいらない。
WindowsUpdateしたてのWindows10があれば十分だ。
#まずパスを探す
おもむろにCドライブを開き、以下フォルダを探す。

```
C:\Windows\Microsoft.NET\Framework64\v4.0.30319
```

さすがに今時32bit環境を使っているエンジニアはいないと思うので
64bit環境限定とする。パスはWindows10 21H1のもの。
#バッチファイルを作成
環境変数のpathを追記するのは結構面倒なのでバッチで代用する。
適当な名前のバッチファイル、たとえば netdev.bat を作る。
内容は以下。

```
@echo off
set path=%path%;C:\Windows\Microsoft.NET\Framework64\v4.0.30319
cd \
cmd.exe /k
```

cd \ の部分は作業ディレクトリに修正する。アイコンは好みで変更。
これでバッチをダブルクリックするとプロンプトが開く。
その状態でcscとかvbcとかコマンドを入力すると

```
C:\>csc
Microsoft (R) Visual C# Compiler version 4.8.4084.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.

This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to C# 5, which is no longer the latest version. For compilers that support newer versions of the C# programming language, see http://go.microsoft.com/fwlink/?LinkID=533240

warning CS2008: ソース ファイルが指定されていません。
error CS1562: ソースのない出力には、/out オプションを指定しなければなりません。

C:\>vbc
Microsoft (R) Visual Basic Compiler version 14.8.4084
for Visual Basic 2012
Copyright (c) Microsoft Corporation.  All rights reserved.

This compiler is provided as part of the Microsoft (R) .NET Framework, but only supports language versions up to Visual Basic 2012, which is no longer the latest version. For compilers that support newer versions of the Visual Basic programming language, see http://go.microsoft.com/fwlink/?LinkID=533241

               Visual Basic コンパイラのオプション

                                  - 出力ファイル -
/out:<ファイル>                   出力ファイル名を指定します。
/target:exe                       コンソール アプリケーションを作成します (既定値)。 (短い形式: /t)
/target:winexe                    Windows アプリケーションを作成します。
/target:library                   ライブラリ アセンブリを作成します。
/target:module                    アセンブリに追加できるモジュールを作成します。
/target:appcontainerexe           AppContainer で実行される Windows アプリケーションを作成します。
/target:winmdobj                  Windows メタデータ中間ファイルを作成します
/doc[+|-]                         XML ドキュメント ファイルを生成します。
/doc:<file>                       XML ドキュメント ファイルを <ファイル> に生成します。

                                  - 入力ファイル -
/addmodule:<ファイル リスト>      指定されたモジュールからメタデータを参照します。
/link:<ファイル リスト>           指定された相互運用アセンブリからメタデータを埋め込みます。 (短い形式: /l)
/recurse:<ワイルドカード>         ワイルドカードの指定に従って、すべてのファイルを現在のディレクトリおよびサブディレクト                                  リに含めます。
/reference:<ファイル リスト>      指定されたアセンブリからメタデータを参照します。 (短い形式: /r)

                                  - リソース -
/linkresource:<リソース情報>      指定したファイルを外部アセンブリ
                                  リソースとしてリンクします。resinfo:<ファイル>[,<名前>[,public|private]] (短い形式:
                                  /linkres)
/nowin32manifest                  既定のマニフェストは出力 PE のマニフェスト セクションに埋め込まないでください。
/resource:<リソース情報>          指定したファイルを埋め込みアセンブリ
                                  リソースとして追加します。resinfo:<ファイル>[,<名前>[,public|private]] (短い形式:
                                  /res)
/win32icon:<ファイル>             既定の Win32 リソースの Win32 アイコン ファイル (.ico) を指定します。
/win32manifest:<ファイル>         指定されたファイルは出力 PE のマニフェスト セクションに埋め込まれています。
/win32resource:<ファイル>         Win32 リソース ファイル (.res) を指定します。

                                  - コード生成 -
/optimize[+|-]                    最適化を有効にします。
/removeintchecks[+|-]             整数のチェックを削除します。既定値は Off です。
/debug[+|-]                       デバッグ情報を生成します。
/debug:full                       完全なデバッグ情報を生成します (既定値)。
/debug:pdbonly                    PDB ファイルのみを生成します。

                                  - エラーと警告 -
/nowarn                           すべての警告を表示しません。
/nowarn:<番号リスト>              個々の警告リストを無効にします。
/warnaserror[+|-]                 すべての警告をエラーとして扱います。
/warnaserror[+|-]:<番号リスト>    警告リストをエラーとして扱います。

                                  - 言語 -
/define:<シンボル_リスト>         条件付きコンパイル シンボルをグローバルに宣言します。symbol_list:name=value,...
                                  (短い形式: /d)
/imports:<インポート_リスト>      参照されたメタデータ ファイルの名前空間に対して Imports
                                  をグローバルに宣言します。import_list:namespace,...
/langversion:<番号>               言語バージョンを指定します: 9|10|11。
/optionexplicit[+|-]              変数の明示的な宣言が必要です。
/optioninfer[+|-]                 変数の型推論を許可します。
/rootnamespace:<文字列>           すべての型宣言に対してルート名前空間を指定します。
/optionstrict[+|-]                厳密な言語セマンティクスを適用します。
/optionstrict:custom              厳密な言語セマンティクスが守られていないときに警告します。
/optioncompare:binary             バイナリ スタイルの文字列比較を指定します。既定値です。
/optioncompare:text               テキスト スタイルの文字列比較を指定します。

                                  - その他 -
/help                             この使用方法に関するメッセージを表示します。 (短い形式: /?)
/noconfig                         VBC.RSP ファイルを自動的に含めません。
/nologo                           コンパイラの著作権見出しを表示しません。
/quiet                            非表示出力モードです。
/verbose                          メッセージを表示します。

                                  - 詳細 -
/baseaddress:<番号>               ライブラリまたはモジュールのベース アドレス (16 進) です。
/bugreport:<ファイル>             障害報告ファイルを作成します。
/codepage:<番号>                  ソース ファイルを開くときに使用するコードページを指定します。
/delaysign[+|-]                   厳密な名前のキーのパブリックな部分のみを使ってアセンブリに遅延署名します。
/errorreport:<文字列>             内部コンパイラ エラーの処理方法を指定します。prompt、send、none、または queue (既定値)                                  でなければなりません。
/filealign:<番号>                 出力ファイル セクションで使用する配置を指定します。
/highentropyva[+|-]               高エントロピ ASLR を有効にします。
/keycontainer:<文字列>            厳密な名前のキー コンテナーを指定します。
/keyfile:<ファイル>               厳密な名前のキー ファイルを指定します。
/libpath:<パス_リスト>            メタデータ参照を検索するディレクトリの一覧です。セミコロンで区切られます。
/main:<クラス>                    Sub Main を含むクラスまたはモジュールを指定します。System.Windows.Forms.Form
                                  を継承するクラスも指定できます。 (短い形式: /m)
/moduleassemblyname:<文字列>      このモジュールが一部となるアセンブリ名です。
/netcf                            .NET Compact Framework を対象にします。
/nostdlib                         標準ライブラリ (system.dll および VBC.RSP ファイル) を参照しません。
/platform:<文字列>                このコードを実行できるプラットフォームを、x86、x64、Itanium、arm、AnyCPU32BitPreferred                                  、または anycpu (既定値) に限定します。
/sdkpath:<パス>                   .NET Framework SDK ディレクトリ (mscorlib.dll) の場所です。
/subsystemversion:<バージョン>    出力 PE のサブシステム バージョンを指定します。バージョン: <番号>[.<番号>]
/utf8output[+|-]                  コンパイラ出力を UTF8 文字エンコードで作成します。
@<ファイル>                       コマンドライン設定をテキスト ファイルから挿入します。
/vbruntime[+|-|*]                 既定の Visual Basic ランタイムを使用して、または使用せずにコンパイルします。
/vbruntime:<file>                 <ファイル> の別の Visual Basic ランタイムを使用してコンパイルします。


C:\>
```

のように、C#コンパイラやVB.NETコンパイラが使える。
引数にソースファイルをつけてコンパイルオプションを指定するだけ。