Visual Studioの開発環境メモ

#1. はじめに
以前にJavaの開発環境メモという記事を作成した。
自分用の備忘録として役に立っているので、Visual Studio版を作成する。

##1-1. 環境
Visual Studio2019 Community

#2. Visual Studioの設定

## 2-1.Visual Studioの設定

### 2-1-1.dotnet-format

#### dotnet-formatとは
editorconfigファイルを使用して、ソリューション内のファイルを一括して整形することが可能なツール。

#### インストール
1. スタートメニューから「Developer Command Prompt for VS 2019」を起動。
2. ソリューションフォルダに移動。
3. マニフェストファイルを作成するため、以下を入力する。「dotnet new tool-manifest」
4. 以下を入力し、インストールする。「dotnet tool install dotnet-format」

#### 実行
「dotnet format」を入力し、実行する。

#### 参考サイト
https://blog.shibayan.jp/entry/20200322/1584875344

## 2-2.ソリューションの設定

### 2-2-1.コード分析規則セットを追加
1. ソリューションを右クリックし、[追加]-[新しい項目]
2. 「コード分析規則セット」を選択
3. ルールセットを設定する

## 2-3.プロジェクトの設定

### 2-3-1.Properties
+ [アプリケーション]-[既定の名前空間]
+ [ビルド]-[XMLドキュメントファイル]をチェック(SA0001対応)
+ [コード分析]-[アクティブな規則]


# 3.Nuget
## 3-1.StyleCop.Analyzers
### 3-1-1.StyleCopAnalyzersとは
C#の静的分析ツール。
バージョンは最新の安定板である1.1.118を使用する。(2021/1/1)
2019/4/30から更新されていない。
以前にStykeCopを使用したことがあるが、StyleCop.Analyzersとの違いを調べてみた。
StyleCopの後継。

### 3-1-2.インストール
[ツール]-[Nugetパッケージマネージャ]-[ソリューションのNuGetパッケージの管理]を選択。
参照タブで検索窓に「StyleCop.Analyzers」を入れて検索。

### 3-1-3.参考URL
https://opcdiary.net/stylecopanalyzers%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9/
https://qiita.com/github129/items/8270dc74599e71af5285

### 3-1-4.特定のルールを無効化する方法
コード分析規則セットを作成(2-2-1参照)し、プロジェクトでそのファイルを適用する。
1. プロジェクトの「Properties」をダブルクリック
2. [コード分析]-[アクティブな規則]
3. 参照でファイルを選択
4. 無効にしたいルールの操作を「非表示」に変更する


### 3-1-5.無効にするルール
|番号|ルール|無効理由|
|:---|:---|:---|
|SA1200|UsingDirectivesMustBePlacedCorrectly|usingディレクティブがnamespaceエリア外に記述されている。初期状態がそうなっていて、特に困らないので|
|SA1623|PropertySummaryDocumentationMustMatchAccessors|プロパティのコメントルール。Gets or setsで始める必要がある。不要|
|SA1629|DocumentationTextMustEndWithAPeriod|ドキュメントの最後をピリオドにする。不要|
|SA1633|FileMustHaveHeader|ファイル先頭の著作権表示は不要なルールなので|
|SA1642|ConstructorSummaryDocumentationMustBeginWithStandardText|コンストラクタのドキュメントの書き方。不要|
|SA1643|DestructorSummaryDocumentationMustBeginWithStandardText|デストラクタも同様に不要|

### 3-1-6.特定のファイルを無効化
AssemblyInfo.csで警告が出たので、このファイルについてはCheckStyleのチェックを行わないようにしたい。
ファイルの先頭に以下の一文を記載する。(usingの上に記載する必要がある)
// \<auto-generated />

```cs:AssemblyInfo.cs
// <auto-generated />
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
```


## 3-2.log4net

### 3-2-1.log4netとは
Javaで有名なlog4jの.NET版。
2020/4/1に開発休止？NLOGへ移行した方が良いかも。
https://clown.cube-soft.jp/entry/2020/06/01/log4net-to-nlog

## 3-3.NLog

### 3-3-1.NLogとは
ログを出力するためのライブラリ。試したバージョンは4.7.7。

### 3-3-2.インストール

Nugetでインストールする。「NLog.config」をインストールするという手順があるが、スキーマとコンフィグファイルが作成されるだけなので、「NLog」をインストールして、自分でconfigファイルを作成しても問題ない。
なお「NLog.config」をインストールするとスキーマファイルも作成されるが、無くても問題は無い。

### 3-3-3.設定ファイル(NLog.config)

ファイル名や探す場所にはルールがある。

#4.Git

## 4-1.Githubからプロジェクトを作成
Visual Studioを起動し、コード無しで続行。
[ファイル]-[リポジトリのクローン]を選択。
「リポジトリの場所」にgithubのURLを張り付ける。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/653648cc-21bc-719d-da59-995334f74de6.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/7697f6c5-31e6-2be3-b061-2d1121105ff9.png)

#5.Jenkins

#6.コーディングルール

## 6-1.名前付けのガイドライン
基本は以下のマイクロソフトのルールを使用する。
https://docs.microsoft.com/ja-jp/dotnet/standard/design-guidelines/naming-guidelines

+ 名前は英語で付ける。(同じ意味の英単語が複数ある場合は、辞書を作成する)
+ 1単語ごとの頭文字を大文字にする。(Pascal表記)
+ 

## 6-2.書く順番

まずは項目ごとに並べる。同じ項目の場合は、アクセスレベルごとに並べる。
アクセスレベルが同じならstaticを上にする。
なので、internal staticのフィールドとpublicのフィールドがある場合は、publicを上にする。

### 6-2-1.項目の順番(SA1201)
フィールド
コンストラクター
ファイナライザー (デストラクター)
デリゲート
イベント
列挙型
インターフェイス
プロパティ
インデクサー
メソッド
構造体
クラス*(C#9のレコードを含む)

### 6-2-2.アクセスレベルの順番(SA1202)
public
internal
protected internal
protected
private protected
private

### 6-2-3.staticの順番(SA1204)
staticと非staticはstaticを上に書く

## 6-3.StyleCopでよく見かけるエラーと対応方法

|番号|ルール|対応方法|
|:---|:---|:---|
|SA1513|ClosingBraceMustBeFollowedByBlankLine|閉じかっこの後に空白行が無い|
|SA1600|ElementsMustBeDocumented|XMLドキュメント(///)を作成する|

## 8-1.フォルダ構成

ドメイン駆動開発のフォルダ構成を参考にする。
https://anderson02.com/cs/nddd/nddd-05/


# 9.便利なショートカットなど

## 9-1.コンストラクタ作成

空のコンストラクタは「ct」タブタブでTabキーを二回押すと作られる。
引数ありの場合は、Ctrl＋ドットで、「コンストラクターを生成する」を選択する。

## 10.トラブルシューティング

## 10-1.プロジェクトのプロパティが開けない

以下のエラーが発生する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187121/e7b09ff6-2ed2-9690-231c-4338b34424f7.png)

コンパイルすると以下のエラーが出ているので、その関係か？
『"StykeCopTask"タスクをアセンブリ～から読み込めませんでした。～\<UsingTask>宣言が正しいこと、アセンブリとの依存関係が使用可能であること、およびMicrosoft.Build.Framework.Taskを実装するパブリッククラスがタスクに含まれていることを確認してください。』

プロジェクトの*.csprojファイルにStyleCopyの指定がある。

⇒解決せず・・・。結局原因は
.NET開発をインストールしていなかったのが原因・・・

参考にしたサイトは以下
https://takap-tech.com/entry/2019/12/07/182157