最速で.NETにVSCodeで入門してみた。

## .NETダウンロード
[公式ダウンロードページ](https://dotnet.microsoft.com/ja-jp/)にアクセスすべし。すぐにインストールが完了する。必要なのは500MBほど。
## C# Dev Kitをインストールする
VSCodeのエクステンションC# Dev Kitをインストールする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479750/4cb1bda4-5238-681c-1622-005fcdc41411.png)
これでVS Codeでの.Netの環境を整えてくれる。

## Hello world!まで
VSCodeでMacならcmd+Shift+Pでパネルを開く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479750/1c1c80c1-2b31-7e2d-b0e5-193d8a34516d.png)
.Net: New Projectを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479750/f3962cb7-2638-e8a1-6eeb-f86496edcd23.png)
Console Appを選択し、プロジェクト名(私の場合は**ConsoleApp1**)を入力すると自動的にファイル達が生成される。

コードは**Program.cs**にかかれる

### 実行
```
dotnet run
```
で実行！Hello worldが表示される。

## Packageをインストールする
Microsoftの公式チュートリアルによると、Password generatorというものを練習例としているのでやってみる。
.NetのパッケージマネージャーはNuGetというものらしい。
https://www.nuget.org/
これにアクセスしてPassword generatorを検索する。



```csharp
using PasswordGenerator;

var pwd = new Password();
var password = pwd.Next();
Console.WriteLine(password.ToString());
```

1. `using PasswordGenerator;`：
   この行は、`PasswordGenerator`という名前空間を使用していることを示している。これにより、`PasswordGenerator`内のクラスやメソッドをコード内で使用することが可能となる。

2. `var pwd = new Password();`：
   この行は、`Password`クラスの新しいインスタンスを作成し、それを`pwd`という変数に代入している。`Password`クラスはパスワードを生成する機能を持っていると考えられる。

3. `var password = pwd.Next();`：
   この行は、`pwd`オブジェクトの`Next`メソッドを呼び出し、その結果を`password`という変数に代入している。`Next`メソッドは次のパスワードを生成するメソッドであると考えられる。

4. `Console.WriteLine(password.ToString());`：
   この行は、`password`オブジェクトを文字列に変換し（もし既に文字列でない場合）、それをコンソールに出力している。

## ディレクトリ構造

一番気になったのがディレクトリ構造。普段pythonやTypescriptなので初見「なにこれ。。」って感じでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479750/c8ba99d1-21c9-39ee-3a32-5b56e9968914.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3479750/669be519-6d46-cbcd-0bb2-5c032f21bf70.png)

調べた結果を以下に記します。

もちろんです。以下にである調で解説いたします。

#### 概要

1. **ConsoleApp1 フォルダ**:
   - これはメインのプロジェクトディレクトリである。

2. **bin/Debug/net8.0 フォルダ**:
   - **ConsoleApp1**: ビルド後に生成された実行可能ファイルである。
   - **ConsoleApp1.deps.json**: アプリケーションに必要な依存関係を含むファイルである。
   - **ConsoleApp1.dll**: プロジェクトのコンパイル後の出力である .NET アセンブリである。
   - **ConsoleApp1.pdb**: デバッグ用の情報が含まれているファイルである。
   - **ConsoleApp1.runtimeconfig.json**: アプリケーションのランタイム設定を含むファイルである。
   - **PasswordGenerator.dll**: NuGet を通じてインストールされた PasswordGenerator パッケージのコンパイル後の出力である。

3. **obj/Debug フォルダ**:
   - これはビルドプロセス中に使用される中間ファイルを含むフォルダである。
   - **ConsoleApp1.csproj.nuget.dgspec.json**: NuGet パッケージ情報が含まれている。
   - **ConsoleApp1.csproj.nuget.g.props** および **ConsoleApp1.csproj.nuget.g.targets**: これらのファイルには NuGet パッケージのビルドプロパティおよびターゲットが含まれている。
   - **project.assets.json**: プロジェクトの依存関係およびアセット情報が含まれている。
   - **project.nuget.cache**: NuGet によって使用されるキャッシュファイルである。

4. **ConsoleApp1.csproj**:
   - これはプロジェクトファイルで、プロジェクトの設定、依存関係、およびビルド設定を定義するものである。

5. **Program.cs**:
   - これはアプリケーションのコードが含まれているメインの C# ソースファイルである。

6. **MyFirstConsoleApp.sln**:
   - これはソリューションファイルで、複数のプロジェクトを含むソリューション全体に関する情報が含まれている。

### 他のプログラミング言語との主な違い

1. **bin および obj フォルダ**:
   - **bin** フォルダには、ビルドプロセスの出力（実行可能ファイルや DLL）が含まれている。
   - **obj** フォルダには、ビルドプロセス中に使用される中間ファイルが含まれている。これにより、ビルドパフォーマンスが向上し、ビルドごとに再生成する必要がなくなる。

2. **csproj ファイル**:
   - `.csproj` ファイルは、XML を使用してプロジェクト設定、コンパイラオプション、プロジェクト参照、NuGet パッケージ参照などを定義するプロジェクトファイルである。JavaScript の package.json や Python の requirements.txt と似ているが、より詳細に設定できる。

3. **NuGet パッケージ**:
   - NuGet は .NET のパッケージマネージャーである。PasswordGenerator のようなパッケージをインストールすると、そのパッケージと依存関係がプロジェクトにダウンロードされ、プロジェクトの設定に参照が追加される。


以上

## 参考資料
https://youtu.be/j3WgStwhl_k?si=5NskABseCMRh4zzd