CHAPTER 14 BUILDING AND CONFIGURING CLASS LIBRARIES
Figure 14-15. At compile time, a digital signature is generated and embedded into the assembly based, in
part, on public and private key data
Understand that the actual private key data is not listed anywhere within the manifest, but is used
only to digitally sign the contents of the assembly (in conjunction with the generated hash code). Again,
the whole idea of using public/private key data is to ensure that no two companies, departments, or
individuals have the same identity in the .NET universe. In any case, once the process of assigning a
strong name is complete, the assembly may be installed into the GAC.
Note Strong names also provide a level of protection against potential evildoers tampering with your
assembly’s contents. Given this point, it is considered a .NET best practice to strongly name every assembly
(including *.exe assemblies), regardless of whether it is deployed to the GAC.
Generating Strong Names at the Command Line
Let’s walk through the process of assigning a strong name to the CarLibrary assembly created earlier in
this chapter. These days, you will most likely generate the required *.snk file using Visual Studio.
However, in the bad old days (circa 2003), the only option for strongly signing an assembly was to do so
at the command line. Let’s see how to do this.
The first order of business is to generate the required key data using the sn.exe utility. Although this
tool has numerous command-line options, all you need to concern yourself with for the moment is the
-k flag, which instructs the tool to generate a new file containing the public/private key information.
Create a new folder on your C drive named MyTestKeyPair and change to that directory using the
Developer Command Prompt. Next, issue the following command to generate a file named
MyTestKeyPair.snk:
sn –k MyTestKeyPair.snk
Now that you have your key data, you need to inform the C# compiler exactly where
MyTestKeyPair.snk is located. Recall from earlier in this chapter, when you create any new C# project
535