概要
Visual Studio が利用できない環境で C# Managed DLL を Global Assembly Cache (以下「GAC」)にインストールし、
実行ファイルから参照したい機会があったので、手順をまとめておきます。
今時そんな機会はほぼ無いと思われますが、もしかしたらあるところにはあるかも?多分。
手順
1. C# Managed DLL を作成
概要に記載の通り「 Visual Studio が利用できない環境」想定のため、手動で作成します。
本記事の主目的では無いため、詳細は省略。
拾ってきた C# Managed DLL を GAC にインストール・利用したい場合は、手順ごと省略可能です。
[assembly: System.Reflection.AssemblyVersion("1.0.0.0")]
public static class SampleDll {
public static void WriteLine() {
System.Console.WriteLine("WriteLine from SampleDll.");
}
}
sn -k KeyFile.snk
csc /o+ /t:library /keyfile:KeyFile.snk SampleDll.cs
2. C# Managed DLL の GAC へのインストール
Gacutil.exe を使用することで C# Managed DLL の GAC へのインストールが可能です。
Microsoft Docs には「このツールは、Visual Studio と共に自動的にインストールされます。」と記載があり Visual Studio が必要そうですが、
(恐らく)標準でProgram Filesの「Microsoft SDKs」に入っているため
Visual Studio は必要ありません。
(手元の環境では「C:/Program Files (x86)/Microsoft SDKs/Windows/v10.0A/bin/NETFX 4.8 Tools/gacutil.exe」にありました。)
gacutil /i SampleDll.dll
3. GAC の利用
ビルド時の利用
GAC へインストールした C# Managed DLL は .NET Framework
のバージョンにより「%windir%\Assembly」または「%windir%\Microsoft.NET\Assembly」に格納されています。
しかし、そのパスを csc.exe で簡単に参照することはできないため、
本記事では「実行時の参照」のみ「 GAC の利用」として扱い、ビルド時の利用方法については扱いません。
CUIによるビルド時に GAC を利用したい場合、素直に MSBuild を使用しましょう。
(Microsoft Docs に記載されている通り MSBuild は Visual Studio に依存しません。)
( GAC にインストールされたファイルからリンク対象 DLL を検索するスクリプトを作成し、 csc.exe をラップするのも一つの方法です。)
static class SampleExe {
static void Main () {
SampleDll.WriteLine();
}
}
csc /o+ SampleExe.cs /r:SampleDll.dll
実行時の利用
Microsoft Docs の ランタイムがアセンブリを検索する方法に記載されている通り、
アプリケーション構成ファイルの作成・編集等、実行時の参照先としての一切の指定は不要で、
その環境におけるあらゆる実行ファイルで(必要に応じて)自動で参照されます。
例として、「3. GAC の利用 > ビルド時の利用」で作成した実行ファイル「SampleExe.exe」は、
ビルド時に参照先と指定した同一ディレクトリにある「SampleDll.dll」を削除しても問題なく動作します。