C#で別ソリューションのWindowsフォームクラスライブラリを読み込む

# 1. はじめに
* C# .NET6 で別ソリューションで作成したユーザーコントロールをDLL参照からツールボックスに表示できるようにしたい
* .NET FrameworkツールボックスからDLL参照した場合、「ツールボックス項目を動的に列挙できないプラットフォームを対象としています。」と表示されるため、別の方法で解決したい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/5f55bbdd-4b2e-ce8f-177d-03d79fbd7e92.png)

# 2. 開発環境
* C# .NET6
* Visual Sutido 2022
* Windows 11

# 3. Windowsフォームクラスライブラリの作成
* ユーザーコントロールを作成するプロジェクトを準備する

## 3.1. プロジェクトの作成
* Visual Studioを起動し、新しいプロジェクトの作成ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/6945ec80-fcd3-36ab-cbc1-600fb18a03fb.png)

* ```Windowsフォームクラスライブラリ```を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/a27e951c-0dab-7ae1-82b4-987a918d4705.png)

* 任意のプロジェクト名、場所、ソリューション名を入力する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/9912f1e6-4f80-4750-af00-02c56acff111.png)

* フレームワークは```.NET 6.0```を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/3bd0e95c-b773-f9ab-a8c7-fb7a5e5b7a18.png)

## 3.2. ユーザーコントロールの作成
* プロジェクトを右クリックして、```追加``` > ```ユーザーコントロール``` を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/fc5d2787-9263-70cf-0bc3-294d09538474.png)

* 任意の名前を入力して、```追加```ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/6c9bc5ad-32c2-4392-6e5e-8295abf6cb61.png)

* テストのため、デザイナーでLabelコントロールを配置する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/56f0d863-14c4-1fad-6bfa-b812206f75f5.png)

* ```ビルド``` > ```ソリューションのビルド```を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/3029832e-e898-00ed-4d0f-a22bd2ad5f6d.png)

* ビルドが完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/f48b6ebb-f0ae-2742-7de0-9479ca3d7f62.png)

# 4. Windowsフォームプロジェクトの作成
* Visual Studioを起動し、新しいプロジェクトの作成ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/6945ec80-fcd3-36ab-cbc1-600fb18a03fb.png)

* ```Windowsフォームアプリ```を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/d30b1ae3-5225-2729-c92e-d685cac96b9f.png)

* 任意のプロジェクト名、場所、ソリューション名を入力する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/cb1f21b2-697a-3a9a-9b93-85c4daee5154.png)

* フレームワークは```.NET 6.0```を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/99f24023-ddfa-5363-ed7a-585080341075.png)

# 5. Windowsフォームクラスライブラリの参照
## 5.1. NGの場合（ツールボックスからDLL参照）
* ```ツール``` > ```ツールボックスアイテムの選択``` を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/10b339df-4520-c4b1-deea-9d67adb194ce.png)

* ```.NET Frameworkコンポーネント``` タブを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/c0bd5d3e-ab4f-07ea-0663-66f35072b912.png)

* ```参照``` ボタンをクリックして、作成したWindowsフォームクラスライブラリのDLLを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/69cfcb53-98b0-e932-856a-6e481b76952c.png)

* エラーが発生してDLLを参照できない
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/7e339521-62c4-8902-7c77-207a58a54363.png)

## 5.2. OKの場合（NuGetからDLL参照）
### 5.2.1. Windowsフォームクラスライブラリのパック化
* NuGetパッケージで配布できるように、Windowsフォームクラスライブラリのプロジェクトを右クリックして、```パック化``` を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/8ab9a4db-8568-cfdb-f356-9f11487fdacc.png)

* .NUPKGが作成される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/5a9f27ac-e5cb-f115-0d33-c520c6426b6e.png)

### 5.2.2. NuGetパッケージマネージャーの設定
* ```ツール``` > ```NuGetパッケージマネージャー``` > ```パッケージマネージャー設定``` を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/27510838-30ec-28c9-de24-b38b31a6e25d.png)

* 画面上部の```+``` ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/9169fb2f-3df2-d300-20ca-58293aa765fe.png)

* 任意の名前、ソース名を入力して、```更新```, ```OK```` ボタンの順にクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/7e756326-66dd-1ace-593f-2d5f50a87352.png)
    * ソース名は```...``` ボタンから任意のローカルフォルダを指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/c5d8e365-ac7f-87a2-1e59-fdf15f8a6219.png)

* 上記ソース名（フォルダ）にパック化したファイルをコピーする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/a131986c-2542-2841-7c84-773b3ae7df56.png)

### 5.2.3. NuGetからのインストール
* Windowsフォームアプリのプロジェクトを右クリックして、```NuGetパッケージの管理``` を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/8cfcf59e-c09c-7f25-9f2a-706b204020da.png)

* ```参照``` タブを選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/92083875-b908-561c-12a4-486c450e9bd7.png)

* パッケージリソースを新規作成したリソースに変更し、```インストール``` ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/f0624d2a-f59f-9b09-fcf9-97185d00bd0a.png)

* ```OK``` ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/1c9b97cb-e9e4-2e71-ae9d-955bdbfe3911.png)

* インストールされたことを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/ead60ffc-b4ae-cea0-6ad2-9a0ef6957073.png)

# 6. 動作確認
* ツールボックスに作成したユーザーコントロールが追加されていることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/dbafd600-cd90-fe5b-e145-8d8efdde4673.png)

# 7. 参考文献

http://sheepdogjam.cocolog-nifty.com/blog/2021/02/post-3860f2.html