0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CUIによる C# Managed DLL の作成・ Global Assembly Cache へのインストール・利用手順

Last updated at Posted at 2020-07-11

概要

Visual Studio が利用できない環境で C# Managed DLL を Global Assembly Cache (以下「GAC」)にインストールし、
実行ファイルから参照したい機会があったので、手順をまとめておきます。

今時そんな機会はほぼ無いと思われますが、もしかしたらあるところにはあるかも?多分。


手順

1. C# Managed DLL を作成

概要に記載の通り「 Visual Studio が利用できない環境」想定のため、手動で作成します。
本記事の主目的では無いため、詳細は省略。
拾ってきた C# Managed DLL を GAC にインストール・利用したい場合は、手順ごと省略可能です。

SampleDll.cs
[assembly: System.Reflection.AssemblyVersion("1.0.0.0")]

public static class SampleDll {
  public static void WriteLine() {
    System.Console.WriteLine("WriteLine from SampleDll.");
  }
}
C# Managed DLL ビルドコマンド
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 に記載されている通り MSBuildVisual Studio に依存しません。)
( GAC にインストールされたファイルからリンク対象 DLL を検索するスクリプトを作成し、 csc.exe をラップするのも一つの方法です。)

SampleExe.cs
static class SampleExe {
  static void Main () {
    SampleDll.WriteLine();
  }
}
ビルドコマンド
csc /o+ SampleExe.cs /r:SampleDll.dll
実行時の利用

Microsoft Docs の ランタイムがアセンブリを検索する方法に記載されている通り、
アプリケーション構成ファイルの作成・編集等、実行時の参照先としての一切の指定は不要で、
その環境におけるあらゆる実行ファイルで(必要に応じて)自動で参照されます。

例として、「3. GAC の利用 > ビルド時の利用」で作成した実行ファイル「SampleExe.exe」は、
ビルド時に参照先と指定した同一ディレクトリにある「SampleDll.dll」を削除しても問題なく動作します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?