SUMMARY
This article describes how to generate a strong name for an
assembly, and how to install a DLL file in the Global Assembly Cache (GAC).
With the GAC, you can share assemblies across many applications. The GAC is
automatically installed with the .NET runtime. Components are typically stored
in C:\WINNT\Assembly.
To install an assembly in the GAC, you must give
the assembly a strong name. The name is a cryptographic hash-key, or signature.
This strong name ensures correct component versioning. This helps to prevent
components that have the same name from conflicting with each other, or from
being incorrectly used by a consuming application.
back to the topRequirements
The following list outlines the recommended hardware, software,
network infrastructure, and service packs that are required:
- Administrator rights to the computer where the shared
assembly is being installed
This article assumes that you are familiar with the
following topics:
- General familiarity with assemblies in .NET or Visual Studio 2005
- General familiarity with the use of tools from the command
prompt
back to the topGlobal Assembly Cache
To create a small Class Library project by using Visual Studio
.NET or Visual Studio 2005, to generate a strong name, and to install the .dll file of the project in
the GAC, follow these steps:
- In Visual Studio .NET or in Visual Studio 2005, create a new Visual C# Class
Library project, and name the project
GACDemo.
- You must use a strong name. To generate this cryptographic
key-pair, use the SN Tool. This tool is located in the \bin subdirectory where
the .NET Framework Solution Developer Kit (SDK) is installed. The SN Tool is
easy to use. The command-line statement takes the following
form:sn -k "[DriveLetter]:\[DirectoryToPlaceKey]\[KeyName].snk"
- Create a directory named GACKey in
C:\ so that you can easily locate the key, and access the key from the command
prompt.
Note For most users, the .NET tools are located in C:\Program
Files\Microsoft.NET\FrameworkSDK\Bin. Before you type the following SN command,
you may want to copy this similar path on your computer to the .NET bin
directory. Type cd from the command prompt, right-click
to paste the path, and then press ENTER to quickly change to the directory
where the SN Tool is located.
Type the following: sn -k "C:\GACKey\GACkey.snk"
- A key is generated, but it is not yet associated with the
assembly of the project. To create this association, double-click the
AssemblyInfo.cs file in Visual Studio .NET Solution Explorer. This file has the
list of assembly attributes that are included by default when a project is
created in Visual Studio .NET. Modify the AssemblyKeyFile
assembly attribute in the code as follows:
[ assembly: AssemblyKeyFile("C:\\GACKey\\GACKey.snk")]
Compile the project by clicking CTRL+SHIFT+B. You do not have to
have any additional code to install a .dll file in the GAC. - You can install the .dll file by using the Gacutil Tool, or
by dragging the .dll file to the appropriate directory. If you use the Gacutil
Tool, you can use the following command:
gacutil -I "[DriveLetter]:\[PathToBinDirectoryInVSProject]\gac.dll"
If you want to drag the file, use Microsoft Windows Explorer. Open
two instances of Windows Explorer. In one instance, find the location of the
.dll file output for your console project. In the other instance, find
c:\[SystemRoot]\Assembly.
Drag your .dll file to the
Assembly folder.
back to the topComplete Code Listing (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("")]
back to the topVerification
- Start Windows Explorer.
- Locate C:\SystemRoot\ assembly.
- You see GACDemo in the list of installed .dll
files.
back to the
top