
第一个作用是区分发行者
比如
你有一个 a.dll,version=1.0.0.1,culture=de-DE
我也有一个 a.dll,version=1.0.0.1,culture=de-DE
那这两个程序集放在一起不就冲突了吗
这时候,如果我们分别对各自的程序集加上强名,那么.NET就能区分这两个程序集
第二个作用是防止程序集被篡改
不是说你加了强名,别人就不能改你的程序集。而是如果被改了,就过不了调用方的强名验证,调用方就不认这个被非法修改了的程序集。
比如有一个程序集b.dll,很多程序和其他程序集都引用了它。现在有些人处于某些目的,把这个b.dll篡改了,加上一些后门之类的东西,然后在网络上传播。如果是普通程序集,那他的目的就能够达到。但是如果程序集有强名(并且调用方都是完全限定调用的),那所有用到b.dll的代码都不认这个被非法修改过的版本。
其他一些作用是CLR在处理程序集引用时用到的。比如有强名的程序集在解析时会进行版本检查,没有强名的程序集就不进行这个检查。
有强名的程序集可以配置在任何位置,没有强名的程序集只能配置在应用程序的私有目录下
具体的去MSDN上看吧,很多,很杂又很散
了用强命名标识一个程序集,你必须拥有一对公钥和私钥。这一对公钥私钥加密密钥用作编译期间生成强命名的程序集(汇编程序).你可以使用强命名工具(Sn.exe)创建一个密钥对.密钥文件通常都具有一个.snk的文件扩展名。●创建一个密钥对
在命令提示符下,键入以下命令:
Sn –k <file name
在此命令中,<file name是一个包含密钥对的输出文件的名字。
以下例子是创建一个名叫sgKey.snk的密钥对文件
sn –k sgKey.snk
如果你希望延迟标识程序集并且也希望控制整个密钥对(它不像外部测试情景,场景),你可以用一下命令生成一对密钥对,然后从此密钥对中提取公钥到一个单独的文件。
首先,创建密钥对:
sn –k keypair.snk
然后,从上面生成的密钥对文件(keypair.snk)中提取公钥,并拷贝到一个独立的文件中:
sn –p keypair.snk public.snk
一旦你创建了密钥对,你就必须将此文件放置在强命名标识工具能够找到它的位置。
当运用强命名标识一个程序集的时候,程序集连接器(Assembly Linker (Al.exe))会寻找与当前目录有关的密钥文件,并输出到当前目录。在使用命令行工具编译 的时候,也可以很容易的拷贝此密钥到包含代码模块的的当前目录下。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)