インストーラクラスでインストーラを作成する

はじまり、はじまり。

Visual Studio 2017を使って、GACにプログラムをインストールし、実行できるようにします。

を実現するために、今回はインストーラクラスを使ってみました。

■ ■ ■ ■ 目次
■ ■ ■ 1.インストーラクラスをインストールする。
■ ■ ■ 2.インストーラプロジェクトを追加する。
■ ■ ■ 3.インストールするexe, dllを選択する。
■ ■ ■ 4.インストール先のフォルダを選択する。
■ ■ ■ 5.ソリューションをビルドする。
■ ■ ■ 6.セットアッププロジェクトをビルドする。
■ ■ ■ 7.インストールする。
■ ■ ■ 8.実行する。
■ ■ ■ 9.アンインストールする。

■ ■ ■ 1.インストーラクラスをインストールする。
■ ■ 1-1.インストーラプロジェクト (InstallerProjects.vsix) を下のサイトからダウンロードし、インストールする。

【ダウンロードサイト】
https://marketplace.visualstudio.com/items?itemName=visualstudioclient.MicrosoftVisualStudio2017InstallerProjects

インストーラプロジェクトのインストール手順は省きます。

■ ■ ■ 2.インストーラプロジェクトを追加する。
■ ■ 2-1.インストールしたいソリューションのソリューションエクスプローラーで、[ソリューションを右クリック]-[追加]-[新しいプロジェクト] を選択します。

■ ■ 2-2.「新しいプロジェクトの追加」 ウィンドウの左ペインで [インストール済]-[その他のプロジェクトの種類]-[Visual Studio Installer] を選択し、中央ペインで [Setup Project] を選択する。名前を入力した後、OKボタンをクリックする。

■ ■ 2-3.追加すると、ソリューションエクスプローラーにSetupプロジェクトが追加され、「File System (Setup)」 がタブに表示される。

■ ■ ■ 3.インストールするexe, dllを選択する。
■ ■ 3-1.「File System (Setup)」 タブの左ペインから[File System Target Machine]-[Application Folder]-[右クリック]-[Add]-[プロジェクト出力] を選択する。

■ ■ 3-2.表示された [プロジェクト出力グループの追加] ウィンドウで [プライマリ出力]を選択し、[OK]ボタンをクリックする。

■ ■ 3-3.「File System (Setup)」 タブの左ペインから[File System Target Machine]-[Application Folder] (※ 以降 [Application Folder] と記述) を選択すると右ペインに exe, dll が表示される。

とはいうものの、疑問点は山ほど!
・StrixuralensisClass.dll <- OK
・System.Net.Http.dll <- 何?
・プライマリ出力 from AikotobahaStrix (Active) ←exeだと思うがなんでこんな面倒な表記?
考え込むと先に進めないので次に行きます。

■ ■ ■ 4.インストール先のフォルダを選択する。
■ ■ 4-1.インストール先のフォルダは、[Application Folder] のプロパティ [DefaultLocation] で指定します。
初期値は 「[ProgramFilesFolder][Manufacturer][ProductName]」 です。

■ ■ 4-2.[ProgramFilesFolder] は、32ビット Windows の場合は 「C:\Program Files」 で、64 ビット Windows 場合は 「C:\Program Files(x86)」 となるようです。

■ ■ 4-3.[Manufacturer] は、[Setup] のプロパティ [Manufacturer] で指定します。
初期値は、「Default Company Name」 です。

■ ■ 4-4.[ProductName] は、[Setup] のプロパティ [ProductName] で指定します。 初期値は、「Setup」 です。

■ ■ ■ 5.ソリューションをビルドする。
アプリケーションを正式版としてビルドするために、ビルド構成をReleaseに変更し、pdbファイルが作成されないようにします。

■ ■ 5-1.ビルド構成をReleaseに変更する。

■ 5-1-1.メインメニューから[ビルド]-[構成マネージャー]を開きます。

■ 5-1-2.「構成マネージャー」 画面で 「アクティブソリューション構成」 を 「Release」 にします。変更したら 「構成マネージャー」 画面を閉じます。

■ ■ 5-2.ビルドでpdbファイルが作成されないようにする。

■ 5-2-1. [ソリューションエクスプローラー]-[AikotobahaStrix]-[右クリック]-[プロパティ]を開く。

■ 5-2-2. AikotobahaStrixプロパティ画面で、ビルドセクションをクリックし、右下の詳細画面ボタンをクリックします。

■ 5-2-3. ビルドの詳細設定画面で、[出力]-[デバッグ情報] を 「なし」 に変更し、「OK」 をクリックします。

■ 5-2-4. 「5-2-1.」~「5-2-3.」の設定を「StrixUralensisClass」にも行います。

■ ■ 5-3.ソリューションをビルドします。

■ 5-3-1. [メインメニュー]-[ビルド]-[ソリューションのビルド] を選択します。

■ 5-3-2. ビルド結果として、「exe, config, dll」 が作成されます。また、「pdb」 が作られていない事を確認します。

■ ■ ■ 6.セットアッププロジェクトをビルドする。
■ ■ 6-1. ソリューションエクスプローラーから [Setup]-[右クリック]-[ビルド] を選択する。

■ ■ 6-2. ビルドの結果はこんな感じになります。

■ ■ 6-3. ビルドされたファイルを確認します。

■ 6-3-1. ソリューションエクスプローラーから [Setup]-[右クリック]-[エクスプローラーでフォルダーを開く] を選択する。

■ 6-3-2. 開かれた、「Setup」 プロジェクトのフォルダーの 「Release」 フォルダを開くとSetup用のファイルが作成されています。

■ ■ ■ 7.インストールする。

■ ■ 7-0. インストール前にインストールされていない事を確認します。
今回は、「C:\Program Files (x86)\Default Company Name\Setup」 にインストールします。ここでは、「C:\Program Files (x86)\Default Company Name」 が作成されていな事を確認します。

■ ■ 7-1. 「6-3-2」 で確認した 「setup.exe」 を実行すると 「Setup セットアップ ウィザードへようこそ」 の画面が表示されるので、「次へ」 ボタンをクリックします。

■ ■ 7-2. 「インストール フォルダーの選択」 の画面が表示されるので、インストール先のフォルダを入力または選択し、「次へ」 ボタンをクリックします。ここでは、初期値のまま次へ進みます。

■ ■ 7-3. 「インストールの確認」 の画面が表示されるので、「次へ」 ボタンをクリックします。

■ ■ 7-4. 「インストールが完了しました。」 の画面が表示されるので、「閉じる」 ボタンをクリックします。これでインストールは完了です。

■ ■ 7-5. インストール後にインストールされている事を確認します。
「C:\Program Files (x86)\Default Company Name\Setup」 フォルダが作成され、アプリケーションのファイルがインストールされている事が確認できます。

■ ■ ■ 8.実行する。
■ ■ 8-1. コマンドプロンプトを開き下記のコマンドを実行します。

cd "C:\Program Files (x86)\Default Company Name\Setup"
dir
AikotobahaStrix.exe

■ ■ 8-2. 正常に実行されていることが確認できました。

■ ■ ■ 9.アンインストールする。
アンインストールはWindows標準機能から行います。

■ ■ 9-1. [スタート]-[設定] を選択します。

■ ■ 9-2. 設定画面にて [アプリ] を選択します。

■ ■ 9-3. 設定画面にて [アプリと機能] から 「Setup」 を選択します。

■ ■ 9-4. 「変更」 と 「アンインストール」 のボタンが表示されるので 「アンインストール」 ボタンをクリックします。

■ ■ 9-5. 「アンインストール」 の確認メッセージが表示されるので 「アンインストール」 ボタンをクリックします。

■ ■ 9-6. 「削除準備中」 の確認メッセージが表示されるのでしばらく待ちます。

■ ■ 9-7. 「この不明な発行元からのアプリがデバイスに変更を加えることを許可しますか?」 のメッセージが表示されるので 「はい」 ボタンをクリックします。

■ ■ 9-8. 設定画面の [アプリと機能] からは 「Setup」 が消えます。

■ ■ 9-9. インストール先フォルダ 「C:\Program Files (x86)\Default Company Name\Setup」 フォルダが削除されます。

おわり

Visual Studio 2017で厳密な名前で署名する

はじまり、はじまり。

Visual Studio 2017を使って、GACにプログラムをインストールし、実行できるようにします。
今回は、Visual Studio 2017でdllに署名します。

■ ■ ■ 目次
■ ■ 1.dllプロジェクトに署名の設定をする。
■ ■ 2.ソリューションをビルドする。
■ ■ 3.exe, dllを配置する。
■ ■ 4.実行する。
■ ■ 5.コード

■ ■ 1.dllプロジェクトに署名の設定をする。
■ 1-1.ソリューション エクスプローラの「StrixUralensisClass」を右クリックし [プロパティ] を選択します。

■ 1-2.「StrixUralensisClass」タブの [署名] セクションを選択し、[アセンブリに署名する] にチェックを入れ、[厳密な名前のキーファイルを選択してください] のコンボボックスを開き、[<参照…>] を選択します。

■ 1-3.厳密な名前のキーファイルを選択します。ここでは、事前作成したキーファイル「AikotobahaStrix.snk」を選択しています。

■ 1-4.厳密な名前のキーファイルを選択した状態です。[厳密な名前のキーファイルを選択してください] のコンボボックスに「AikotobahaStrix.snk」がセットされます。
厳密な名前のキーファイルを選択したら、「StrixUralensisClass」タブを閉じます。

■ ■ 2.ソリューションをビルドする。
■ 2-1.ソリューションのビルドを行います。
   ※コードとビルド手順の詳細は、当サイトの「Visual Studio 2017でexeとdllを分けてビルドする。」を確認してください。

./c-sharp_vs2017_exe_dll_build/

メニューから[ビルド]-[ソリューションのビルド]を選択します。

ビルドが終わると下記の様に「AikotobahaStrix.exe」と「StrixUralensisClass.dll」が作成されます。

■ ■ 3.exe, dllを配置する。
■ 3-1.exeをテストに使用するフォルダにコピーします。

■ 3-2.dllをGacUtilでGACに登録します。
【コマンド】
コマンドプロンプトを管理者で実行し、下記コマンドを実行します。

SET GACUTIL_DIR=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64

“%GACUTIL_DIR%\gacutil.exe” /nologo /i C:\Users\user\source\repos\AikotobahaStrix\AikotobahaStrix\bin\Debug\StrixUralensisClass.dll

■ ■ 4.実行する。
■ 4-1.実行すると、メインとクラスライブラリが実行されている事が確認できました。

おわり

Visual Studio 2017でexeとdllを分けてビルドする。

今回から、Visual Studio 2017を使って、GACにプログラムをインストールし、実行できるようにします。
完了まで数回に分かれます。
使用しているVS2017は、「Visual Studio 2017 Community版」です。

はじまり、はじまり。
今回は、タイトルの通り「VS2017でexeとdllを分けてビルド」します。

■ ■ ■ 目次
■ ■ 1.新しいプロジェクトを作成する
■ ■ 2.クラスライブラリを追加する
■ ■ 3.コードを修正する
■ ■ 4.クラスライブラリへの参照を追加する
■ ■ 5.ビルドし、実行する

■ ■ 1.新しいプロジェクトを作成する
■ 1-1.メニューから[ファイル]-[新規作成]-[プロジェクト]を選択します。

■ 1-2.[新しいプロジェクト]ウィンドウの左ペインから[インストール済み]-[Visual C#]-[Windowsデスクトップ]-[コンソールアプリ]を選択します。
名前は、「AikotobahaStrix」とします。

■ ■ 2.クラスライブラリを追加する
外出しの処理をdllとして追加するためにクラスライブラリを追加します。
■ 2-1.ソリューション エクスプローラから[ソリューションで右クリック]-[追加]-[新しいプロジェクト]を選択します。

■ 2-2.[新しいプロジェクトの追加]ウィンドウの左ペインから[インストール済み]-[Visual C#]-[Windowsデスクトップ]-[クラス ライブラリ]を選択します。
名前は、「StrixUralensisClass」とします。

■ 2-3.追加後は、ソリューション エクスプローラは、こんな感じになります。
図 04-抜粋-クラスライブラリの追加後-ソリューションエクスプローラ.png

■ ■ 3.コードを修正する
「AikotobahaStrix」と「StrixUralensisClass」のコードを修正します。
前回のコードを追加します。
ただし、namespaceは「AikotobahaStrix」としています。

■ ■ 4.クラスライブラリへの参照を追加する
コードを修正すると「AikotobahaStrix」のコードで「現在のコンテキストに’StrixUralensisClass’という名前は存在しません。」とクラスライブラリが存在しない旨の警告が表示されます。

csc.exeでのコンパイルであればパラメータでクラスライブラリの指定をするため発生しなかったのですが、VS2017の場合随時チェックされるので下記の設定が必要になります。

■ 4-1.ソリューションエクスプローラの[参照で右クリック]-[参照の追加]を選択します。

■ 4-2.[参照マネージャー]ウィンドウで「StrixUralensisClass」にチェックを入れ、OKボタンをクリックします。

■ 4-3.参照の追加後は、クラスライブラリが存在しない旨の警告が消えます。

■ ■ 5.ビルドし、実行する
■ 5-1.ソリューションのビルドを行います。
メニューから[ビルド]-[ソリューションのビルド]を選択します。

  ビルドに成功すると[出力]ウィンドウは、こんな感じになります。
  ビルドが終わると下記の様に「AikotobahaStrix.exe」と「StrixUralensisClass.dll」が作成されます。

コード「AikotobahaStrix.exe」

AikotobahaStrix.exe

「StrixUralensisClass.dll」

StrixUralensisClass.dll

■ 5-2.実行してみます。
メインとクラスライブラリが実行されている事が確認できました。

ちなみに、exeを直接ダブルクリックするとコマンドプロンプトらしきウィンドウが一瞬表示されて、すぐに閉じられるので確認になりません。

おわり

C#のGACツールを使って、プログラムを実行できるようにする。

はじまり、はじまり。
今回は、アセンブリの開発~配置~実行についてまとめました。

■ ■ ■ ■ 目次
1. 厳密名付きdllの作成 (アセンブリの作成)
1-1. dllのコンパイル
1-2. dllのリンク
2. 厳密名付きdllの配置 (アセンブリのインストール)
2-1. dllがGACに登録されてない事の確認
2-2. dllをGacUtilでGACに登録
2-3. dllがGACに登録されている事の確認
3. exeの作成
4. exeの実行
5. おまけ (厳密名付きdllのアンインストール (アセンブリのアンインストール) )
5-1. dllがGACに登録されている事の確認
5-2. dllをGacUtilでGACから削除 (管理者で実行)
5-3. dllがGACに登録されてない事の確認

■ ■ ■ ■ まとめ結果

■ ■ ■ 1. 厳密名付きdllの作成 (アセンブリの作成)

■ ■ 1-1. dllのコンパイル

■ テストコード (StrixUralensis.cs)

-------------------
using System;

public class StrixUralensisClass
{
    public static StrixUralensisClass Create()
    {
        Console.WriteLine("StrixUralensis[フクロウ]Class.Create()");
        return new StrixUralensisClass();
    }
}
-------------------

■ コンパイル

-------------------
C:\Users\user>CD C:\CSharp

C:\CSharp>SET CSC_DIR=C:\Windows\Microsoft.NET\Framework64\v4.0.30319

C:\CSharp>"%CSC_DIR%\csc.exe" /nologo /t:module StrixUralensis.cs

C:\CSharp>
-------------------

■ ■ 1-2. dllのリンク

-------------------
C:\Users\user>CD C:\CSharp

C:\CSharp>SET AL_DIR=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64

C:\CSharp>"%AL_DIR%\al.exe" /t:library /out:StrixUralensis.dll /version:1.0 /keyname:CspContainer /nologo StrixUralensis.netmodule

C:\CSharp>
-------------------

■ ■ ■ 2. 厳密名付きdllの配置 (アセンブリのインストール)

■ ■ 2-1. dllがGACに登録されてない事の確認

-------------------
C:\Users\user>CD C:\CSharp

C:\CSharp>SET GACUTIL_DIR=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64

C:\CSharp>"%GACUTIL_DIR%\gacutil.exe" /nologo /l StrixUralensis
グローバル アセンブリ キャッシュには次のアセンブリが含まれています:

項目の数 = 0

C:\CSharp>
-------------------

■ ■ 2-2. dllをGacUtilでGACに登録

-------------------
C:\Users\user>CD C:\CSharp

C:\CSharp>SET GACUTIL_DIR=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64

C:\CSharp>"%GACUTIL_DIR%\gacutil.exe" /nologo /i StrixUralensis.dll
アセンブリが正しくキャッシュに追加されました

C:\CSharp>
-------------------

■ ■ 2-3. dllがGACに登録されている事の確認

-------------------
C:\Users\user>CD C:\CSharp

C:\CSharp>SET GACUTIL_DIR=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64

C:\CSharp>"%GACUTIL_DIR%\gacutil.exe" /nologo /l StrixUralensis
グローバル アセンブリ キャッシュには次のアセンブリが含まれています:
  StrixUralensis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b7137228d5cbf3bf, processorArchitecture=MSIL

項目の数 = 1

C:\CSharp>
-------------------

■ ■ ■ 3. exeの作成

■ テストコード (AikotobahaStrix.cs)

-------------------
using System;

class StrixClass
{
    static void Main(string[] args)
    {
        Console.WriteLine("Strix[フクロウ類]Class.Main()");
        StrixUralensisClass.Create();
    }
}
-------------------

■ コンパイル結果

-------------------
C:\Users\user>CD C:\CSharp

C:\CSharp>SET CSC_DIR=C:\Windows\Microsoft.NET\Framework64\v4.0.30319

C:\CSharp>"%CSC_DIR%\csc.exe" /noconfig /r:StrixUralensis.dll /nologo AikotobahaStrix.cs

C:\CSharp>
-------------------

■ ■ ■ 4. exeの実行

-------------------
C:\Users\user>CD C:\CSharp

C:\CSharp>AikotobahaStrix.exe
Strix[フクロウ類]Class.Main()
StrixUralensis[フクロウ]Class.Create()

C:\CSharp>dir
 ドライブ C のボリューム ラベルがありません。
 ボリューム シリアル番号は 4840-5473 です

 C:\CSharp のディレクトリ

2018/06/03  18:44              .
2018/06/03  18:44              ..
2018/06/03  18:42             3,584 AikotobahaStrix.exe
               1 個のファイル               3,584 バイト
               2 個のディレクトリ  57,164,226,560 バイトの空き領域

C:\CSharp>
-------------------

■ ■ ■ 5. おまけ (厳密名付きdllのアンインストール (アセンブリのアンインストール) )

■ ■ 5-1. dllがGACに登録されている事の確認

-------------------
C:\Users\user>CD C:\CSharp

C:\CSharp>SET GACUTIL_DIR=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64

C:\CSharp>"%GACUTIL_DIR%\gacutil.exe" /nologo /l StrixUralensis
グローバル アセンブリ キャッシュには次のアセンブリが含まれています:
  StrixUralensis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b7137228d5cbf3bf, processorArchitecture=MSIL

項目の数 = 1

C:\CSharp>
-------------------

■ ■ 5-2. dllをGacUtilでGACから削除 (管理者で実行)

-------------------
C:\Users\user>CD C:\CSharp

C:\CSharp>SET GACUTIL_DIR=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64

C:\CSharp>"%GACUTIL_DIR%\gacutil.exe" /nologo /u StrixUralensis,Version=1.0.0.0,Culture=neutral,PublicKeyToken=b7137228d5cbf3bf

アセンブリ: StrixUralensis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b7137228d5cbf3bf, processorArchitecture=MSIL
アンインストール済み: StrixUralensis, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b7137228d5cbf3bf, processorArchitecture=MSIL
アンインストールされたアセンブリの数 = 1
エラーの数 = 0

C:\CSharp>
-------------------

■ ■ 5-3. dllがGACに登録されてない事の確認

-------------------
C:\Users\user>CD C:\CSharp

C:\CSharp>SET GACUTIL_DIR=C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\x64

C:\CSharp>"%GACUTIL_DIR%\gacutil.exe" /nologo /l StrixUralensis
グローバル アセンブリ キャッシュには次のアセンブリが含まれています:

項目の数 = 0

C:\CSharp>
-------------------

おわり

C#、StaticClassのStaticMethodとStaticMemberについて

はじまり、はじまり。
今回は、StaticClass についてまとめました。
■ ■ ■ ■ 目次
1. エラーなしのコード
2. メソッドについて
2-1. Static でないメソッドを定義した時
2-2. Static でないメソッドを呼び出した時
3. メンバーについて
3-1. Static でないメンバーを定義した時
3-2. Static でないメンバーを使用した時
4. おまけ (Static でないメソッドとメンバーを定義して、未使用の時どうなっているか)
■ ■ ■ ■ 結論
Static でないメソッド/メンバーを定義してもエラーにならない。使用するとエラーとなる。
■ ■ ■ ■ 確認結果
■ ■ ■ 1. エラーなしのコード
当然、コンパイル/実行共エラーはありません。
■ テストコード (test1.cs)

-------------------
using System;

public class BaseClass
{
    public static BaseClass Create()
    {
        Console.WriteLine("BaseClass.Create()");
        return new BaseClass();
    }
}

class MainClass
{
    static void Main(string[] args)
    {
        Console.WriteLine("MainClass.Main()");
        BaseClass.Create();
    }
}
-------------------

■ コンパイル結果

-------------------
C:\CSharp>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /nologo test1.cs

C:\CSharp>
-------------------

■ 実行結果

-------------------
C:\CSharp>test1.exe
MainClass.Main()
BaseClass.Create()

C:\CSharp>
-------------------

■ ■ ■ 2. メソッドについて
■ ■ 2-1. Static でないメソッドを定義した時
コンパイル/実行共エラーはありません。実行結果は 1 と同じです。
■ テストコード (test2-1.cs)

-------------------
using System;

public class BaseClass
{
    public static BaseClass Create()
    {
        Console.WriteLine("BaseClass.Create()");
        return new BaseClass();
    }

    public BaseClass Create2()
    {
        Console.WriteLine("BaseClass.Create2()");
        return new BaseClass();
    }
}

class MainClass
{
    static void Main(string[] args)
    {
        Console.WriteLine("MainClass.Main()");
        BaseClass.Create();
    }
}
-------------------

■ コンパイル結果

-------------------
C:\CSharp>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /nologo test2-1.cs

C:\CSharp>
-------------------

■ 実行結果

-------------------
C:\CSharp>test2-1.exe
MainClass.Main()
BaseClass.Create()

C:\CSharp>
-------------------

■ ■ 2-2. Static でないメソッドを呼び出した時
「Static でないメソッド」を呼び出した所で、コンパイルエラーが発生します。
■ テストコード (test2-2.cs)

-------------------
using System;

public class BaseClass
{
    public static BaseClass Create()
    {
        Console.WriteLine("BaseClass.Create()");
        return new BaseClass();
    }

    public BaseClass Create2()    // 11 Line
    {
        Console.WriteLine("BaseClass.Create2()");
        return new BaseClass();
    }
}

class MainClass
{
    static void Main(string[] args)
    {
        Console.WriteLine("MainClass.Main()");
        BaseClass.Create();
        BaseClass.Create2();    // 24 Line
    }
}
-------------------

■ コンパイル結果

-------------------
C:\CSharp>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /nologo test2-2.cs
test2-2.cs(24,9): error CS0120: 静的でないフィールド、メソッド、またはプロパティ 'BaseClass.Create2()'
        で、オブジェクト参照が必要です
test2-2.cs(11,22): (以前のエラーに関連するシンボルの位置)

C:\CSharp>
-------------------

■ ■ ■ 3. メンバーについて
■ ■ 3-1. Static でないメンバーを定義した時
コンパイルにメンバーが使われていないための warning が表示されます。実行エラーはありません。実行結果は 1 と同じです。
■ テストコード (test3-1.cs)

-------------------
using System;

public class BaseClass
{
    private string BaseString = "Aikotobaha";    // 5 Line
    
    public static BaseClass Create()
    {
        Console.WriteLine("BaseClass.Create()");
        Console.WriteLine("BaseString:");    // 10 Line
        return new BaseClass();
    }

}

class MainClass
{
    static void Main(string[] args)
    {
        Console.WriteLine("MainClass.Main()");
        BaseClass.Create();
    }
}
-------------------

■ コンパイル結果

-------------------
C:\CSharp>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /nologo test3-1.cs
test3-1.cs(5,20): warning CS0414: フィールド 'BaseClass.BaseString'
        は割り当てられていますが、その値が使用されていません。

C:\CSharp>
-------------------

■ 実行結果

-------------------
C:\CSharp>test3-1.exe
MainClass.Main()
BaseClass.Create()
BaseString:

C:\CSharp>
-------------------

■ ■ 3-2. Static でないメンバーを使用した時
「Static でないメンバー」を呼び出した所で、コンパイルエラーが発生しました。
■ テストコード (test3-2.cs)

-------------------
using System;

public class BaseClass
{
    private string BaseString = "Aikotobaha";    // 5 Line
    
    public static BaseClass Create()
    {
        Console.WriteLine("BaseClass.Create()");
        Console.WriteLine("BaseString:" + BaseString);    // 10 Line
        return new BaseClass();
    }

}

class MainClass
{
    static void Main(string[] args)
    {
        Console.WriteLine("MainClass.Main()");
        BaseClass.Create();
    }
}
-------------------

■ コンパイル結果

-------------------
C:\CSharp>C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /nologo test3-2.cs
test3-2.cs(10,43): error CS0120: 静的でないフィールド、メソッド、またはプロパティ 'BaseClass.BaseString'
        で、オブジェクト参照が必要です
test3-2.cs(5,20): (以前のエラーに関連するシンボルの位置)

C:\CSharp>
-------------------

■ ■ ■ 4. おまけ
Static でないメソッドとメンバーが定義されていて、使われて無い時、コンパイルされているか調べてみました。調べ方は、ILSpy でコンパイルしたexeをデコンパイルしました。
■ ■ 4-1. 「test2-1.exe」をILSpyで表示しました。
使えない「public BaseClass Create2()」もしっかりコンパイルされています。
■ test2-1.jpg


■ ■ 4-2. 「test3-1.exe」をILSpyで表示しました。
使えない「private string BaseString = "Aikotobaha";」もしっかりコンパイルされています。
■ test3-1.jpg


おわり