关于强命名程序集的作用总的来说就是两个:
1、是防止window以前版本中的DLL hell,可以唯一标志你的程序集(也可以防冒充,像现在的很多木马都是利用这个原理来附属到你的应用程序,加载到你的内存中,所以在任务管理器中,你看不到木马的运行进程)。
2、一定程度的防篡改(如防盗版)。
现在从这两点展开,简单地探讨一下他的实现原理
1、我们都知道,用来唯一标志一个应用程序的有四个部分(Name,Version,Culture,publicToken),但是对于前面三个部分,在两个公司的产品里出项相同的情况是有可能的,所以唯一标志你的程序集的可靠保证就是第四个属性,通过非对称算法RSA对你的程序集进行签名,原理上两个公司的公钥/私钥对是不可能相同的(除非共享),所以公钥/私钥对的保密性对一个公司来说是很重要的。
2、我们都知道IL(Intermediate language),一个现成的DLL文件通过.NET自带的工具ILDasm.exe可以很快的反编译成IL,并且对一个老道的.NET程序员来说,是可以看得懂很大一部分的(就知识产权的问题,曾经也有人向微软的专家提出这个问题),假如你在你的DLL里实现注册码的验证判断,只要修改这一部分并且也可以用现成的工具重新编译,哈哈,那你就可以剩去一大笔买注册码的钱了,当然前面说的都是非强命名的,强命名程序集可以一定程度防止这种情况,因为你的程序集是用私钥签名过的,他重新编译则需要你的公钥/私钥对,所以这这个方法也是取决与公钥/私钥对的保密性。
以上只是我大概的理解,有哪些理解错误的地方希望博友不吝提出。