创建强名称程序集

7 篇文章 0 订阅

一个程序集通常包括4个自定义属性,用来惟一识别程序集,它们是文件名(无扩展名)、版本号、区域性标识和公钥标记,比如:

"Hello, version=1.0.0.0, culture=neutral, publicKeyToken=9ebd24cc40ff21fd"

其中publicKeyToken是公钥的64位散列值,可以唯一标识程序集,拥有公钥标记的程序集称为强名称程序集,强名称程序集可以防篡改;可以安装到GAC中,为多个程序集所共享;还可以实施版本策略(不同版本的强名称程序集被认为是不同的程序集)。而公钥标记为空的程序集只能存在于所引用的程序集的目录以及子目录中,也无法实施版本策略(引用它的程序集会忽略版本号)。

公钥可以通过.NET SDK提供的SN.exe命令生成,生成方法是:

SN.exe -k Zhang.snk

这样就得到一个名为Zhang.snk的公/私密钥对文件,将其放至某一目录下,比如G:/,然后就可以创建强名称程序集了,只需要在源代码中添加下面的自定义属性即可:

[assembly:AssemblyKeyFile(@"G:/Zhang.snk")]

下面是一个Hello.cs文件,是创建强名称程序集的示例

using System;
using System.Reflection;

[assembly:AssemblyVersion("1.0.0.0")] //程序集版本
[assembly:AssemblyCultureAttribute("")] // 区域(为空,表示语言中立)
[assembly:AssemblyKeyFile(@"G:/zhang.snk")] // 公私密钥对

namespace Zhang.Study
{
	public class Hello
	{
		public Hello() 
		{
			Console.WriteLine("Class Hello Version 1.0");
		}
		public void SayHello()
		{
			Console.WriteLine("Hello, C#!");
		}
	}
}

#Hello.rsp
/out:./bin/Hello.dll
/target:library
Hello.cs
#end

最后编译源代码:csc.exe Hello.rsp,就得到了一个强名称程序集Hello.dll,使用Reflector.exe打开这个程序集,可以看到这样的描述:name: Hello, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9ebd24cc40ff21fd。


参考书籍:
《Microsoft .NET Framework 程序设计》 Jeffery Richter著 商丽媛译 清华大学出版社
《.NET本质论》 Don Box,Chris Sells 著 张晓坤译 中国电力出版社
《MSDN》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值