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

文書翻訳 文書翻訳
文書番号: 815808 - 対象製品
すべて展開する | すべて折りたたむ

目次

概要

この資料では、アセンブリの厳密な名前を生成して、グローバル アセンブリ キャッシュに .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
グローバル アセンブリ キャッシュ
http://msdn.microsoft.com/library/ja/cpguide/html/cpconGlobalAssemblyCache.asp
グローバル アセンブリ キャッシュ ツール
http://msdn.microsoft.com/library/ja/cptools/html/cpgrfglobalassemblycacheutilitygacutilexe.asp

プロパティ

文書番号: 815808 - 最終更新日: 2006年10月4日 - リビジョン: 3.4
この資料は以下の製品について記述したものです。
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2003 Standard Edition
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft ASP.NET 1.0
  • Microsoft ASP.NET 1.1
キーワード:?
kbcodesign kbcommandline kbnamespace kbhowtomaster KB815808
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com