Visual C# でグローバル アセンブリ キャッシュにアセンブリをインストールする方法

Microsoft Visual Basic .NET については、次の資料を参照してください。315682

この資料の内容

概要

この資料では、アセンブリの厳密な名前を生成して、グローバル アセンブリ キャッシュに .dll ファイルをインストールする方法について説明します。グローバル アセンブリ キャッシュ (GAC) を使用すると、アセンブリを多くのアプリケーションで共有できます。GAC は、.NET ランタイムのインストール時に自動的にインストールされます。通常、コンポーネントは C:\WINNT\assembly または C:\WINDOWS\assembly に保存されます。


アセンブリを GAC にインストールするには、アセンブリに厳密な名前を付ける必要があります。実際にはこれは名前ではなく、暗号化されたハッシュ キー、つまり署名です。厳密な名前を使用すると、コンポーネントのバージョン管理を適切に行うことができます。その結果、同じ名前のコンポーネントで競合が発生したり、不適切なコンポーネントがアプリケーションで使用されたりすることを防ぐことができます。


先頭に戻る

必要条件

次の一覧は、推奨する必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack です。
  • 共有するアセンブリをインストールする先のコンピュータでの管理者権限

この資料は、次のトピックについて詳しい知識のあるユーザーを対象としています。
  • .NET のアセンブリや Visual Studio 2005 についての一般的な知識
  • コマンド プロンプトからのツールの使用に関する一般的な知識
先頭に戻る

グローバル アセンブリ キャッシュ

Visual Studio .NET または Visual Studio 2005 を使用して小さなクラス ライブラリ プロジェクトを作成し、厳密な名前を生成し、グローバル アセンブリ キャッシュにプロジェクトの .dll ファイルをインストールするには、以下の手順を実行します。
  1. Visual Studio .NET または Visual Studio 2005 で、新しい Visual C# .NET クラス ライブラリ プロジェクトを作成し、プロジェクトに GACDemo という名前を付けます。
  2. 厳密な名前が必要です。この暗号化されたキー ペアを生成するには、SN ツールを使用します。このツールは、.NET Framework Solution Developer Kit (SDK) のインストール先の \bin サブディレクトリにあります。SN ツールの使用法は簡単です。コマンド ラインで、次の構文を使用します。
    sn -k "DriveLetter:\DirectoryToPlaceKey\KeyName.snk"
  3. ここでは、C:\ に GACKey という名前のディレクトリを作成して、コマンド プロンプトからキーを簡単に見つけてアクセスできるようにします。


    : 大部分のユーザー環境では、.NET ツールは C:\Program Files\Microsoft.NET\FrameworkSDK\Bin にあります。次の SN コマンドを入力する前に、コンピュータの .NET bin ディレクトリのパスをコピーし、コマンド ラインで cd と入力し、右クリックしてパスを貼り付け、Enter キーを押すと、SN ツールがあるディレクトリに簡単に移動できます。


    次のように入力します。
    sn -k "C:\GACKey\GACKey.snk"
  4. キーが生成されますが、このキーはまだプロジェクトのアセンブリと関連付けられていません。この関連付けを行うには、Visual Studio .NET のソリューション エクスプローラで [AssemblyInfo.cs] ファイルをダブルクリックします。Visual Studio .NET でプロジェクトを作成したときに、このファイルにデフォルトで含まれるアセンブリ属性の一覧で、AssemblyKeyFile 属性を次のように変更します。
    [assembly: AssemblyKeyFile("C:\\GACKey\\GACKey.snk")]
    Ctrl + Shift + B キーを押してプロジェクトをコンパイルします。.dll ファイルを GAC にインストールするのに、これ以上のコードは不要です。
  5. .dll ファイルをインストールするには Gacutil ツールを使用するか、.dll ファイルを適切なディレクトリにドラッグします。Gacutil ツールを使用する場合は、次のコマンドを使用できます。
    gacutil -I "DriveLetter:\PathToBinDirectoryInVSProject\GACdemo.dll"
    ファイルをドラッグする場合は、エクスプローラを使用します。エクスプローラのインスタンスを 2 つ開きます。一方では、コンソール プロジェクトの .dll ファイルの出力先に移動します。もう一方では、c:\[SystemRoot]\assembly に移動します。


    .dll ファイルを assembly フォルダにドラッグし、ドロップします。
先頭に戻る

サンプル コード (AssemblyInfo.cs) の完全なリスト

using System.Reflection;
using System.Runtime.CompilerServices;

//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// that is associated with an assembly.
//
[assembly: AssemblyTitle("")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

//
// Version information for an assembly is made up of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values, or you can default the revision and build numbers
// by using the '*' as shown below:

[assembly: AssemblyVersion("1.0.*")]

//
// To sign your assembly you must specify a key to use. See the
// Microsoft .NET Framework documentation for more information about assembly signing.
//
// Use the following attributes to control that key is used for signing.
//
// Notes:
// (*) If no key is specified, the assembly is not signed.
// (*) KeyName refers to a key that has been installed in the Crypto Service
// Provider (CSP) on your computer. KeyFile refers to a file that contains
// a key.
// (*) If the KeyFile and the KeyName values are both specified, the
// following processing occurs:
// (1) If the KeyName can be found in the CSP, that key is used.
// (2) If the KeyName does not exist and the KeyFile does exist, the key
// in the KeyFile is installed to the CSP and used.
// (*) To create a KeyFile, you can use the sn.exe (Strong Name) utility.
// When specifying the KeyFile, the location of the KeyFile must be
// relative to the project output directory which is
// %Project Directory%\obj\<configuration>. For example, if your KeyFile is
// located in the project directory, you would specify the AssemblyKeyFile
// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")]
// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework
// documentation for more information about this.
//
[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("C:\\GACKey\\GACKey.snk")]
[assembly: AssemblyKeyName("")]
先頭に戻る

検証

  1. エクスプローラを起動します。
  2. C:\SystemRoot\assembly に移動します。
  3. インストールされている .dll ファイルの一覧に GACDemo が表示されます。
先頭に戻る

関連情報

詳細については、下記のマイクロソフト Web サイトを参照してください。
グローバル アセンブリ キャッシュへのアセンブリのインストール

http://msdn.microsoft.com/library/ja/cpguide/html/cpconInstallingAssemblyIntoGlobalAssemblyCache.asp
先頭に戻る
プロパティ

文書番号:815808 - 最終更新日: 2008/07/14 - リビジョン: 1

フィードバック