>>1.什么是强名?为什么要使用强名?简单的说,就类似与COM中的对象必须要GUID一样只是这样更加安全,因为,它是使用不对称加密以后了装配件,可以保证调用放,和被调用放的受信.>>为什么程序集缓存重的组件必须有强名?因为,共有装配件,必须要唯一且,受信>>如何使用sn.exe?能不能给出一些例子.sn -k myKey.snk[assembly: AssemblyVersion("1.0.1.1")][assembly: AssemblyKeyFile("..\\..\\myKey.snk")]gacutil /i myAssembly.dll

解决方案 »

  1.   

    强名称由程序集的标识——其简单文本名称、版本号和区域性信息(如果提供)——加上公钥和数字签名组成。强名称是使用相应的私钥,通过程序集文件(包含程序集清单的文件,并因而也包含构成该程序集的所有文件的名称和散列)生成的。Microsoft® Visual Studio .NET® 和在 .NET 框架 SDK 中提供的其他开发工具能够将强名称分配给一个程序集。强名称相同的程序集应该是相同的。通过签发具有强名称的程序集,您可以确保名称的全局唯一性。强名称还特别满足以下要求: 强名称依赖于唯一的密钥对来确保名称的唯一性。任何人都不会生成与您生成的相同的程序集名称,因为用一个私钥生成的程序集的名称与用其他私钥生成的程序集的名称不相同。 
    强名称保护程序集的版本沿袭。强名称可以确保没有人能够生成您的程序集的后续版本。用户可以确信,他们所加载的程序集的版本出自创建该版本(应用程序是用该版本生成的)的同一个发行者。 
    强名称提供可靠的完整性检查。通过 .NET 框架安全检查后,即可确信程序集的内容在生成后未被更改过。但请注意,强名称中或强名称本身并不暗含某一级别的信任,例如由数字签名和支持证书提供的信任。 
    在引用具有强名称的程序集时,您应该能够从中受益,例如版本控制和命名保护。如果此具有强名称的程序集以后引用了具有简单名称的程序集(后者没有这些好处),则您将失去使用具有强名称的程序集所带来的好处,并依旧会产生 DLL 冲突。因此,具有强名称的程序集只能引用其他具有强名称的程序集。
      

  2.   

    下面的方案说明了使用强名称对程序集签名及以后按照该名称引用它的过程。 使用以下方法之一创建具有强名称的程序集 A: 
    使用支持创建强名称的开发环境,例如 Visual Studio .NET。 
    使用强名称工具 (Sn.exe) 创建加密密钥对,并使用命令行编译器或程序集链接器 (Al.exe) 将该密钥对分配给程序集。.NET 框架 SDK 同时提供 Sn.exe 和 Al.exe。 
    开发环境或工具使用开发人员私钥对包含程序集清单的文件哈希签名。数字签名存储在包含程序集 A 的清单的可移植可执行 (PE) 文件中。 
    程序集 B 是程序集 A 的使用者。程序集 B 的清单的引用部分包括代表程序集 A 公钥的标记。标记是完整公钥的一部分,并且这种标记(而不是密钥本身)可用于节省空间。 
    公共语言运行库在程序集置于全局程序集缓存时验证强名称签名。当运行时强名称进行绑定时,公共语言运行库会将存储在程序集 B 的清单中的密钥与用于为程序集 A 生成强名称的密钥进行比较。如果 .NET 框架安全检查通过并且绑定成功,则程序集 B 可保证程序集 A 的位未被篡改,而这些位实际来自程序集 A 的开发人员。 
    注意 此方案不处理信任问题。程序集除强名称外,还带有完整的 Microsoft® Authenticode® 签名。Authenticode 签名包括建立信任的证书。请注意,强名称不要求以这种方式为代码签名,这一点非常重要。事实上,用于生成强名称签名的密钥不必与用于生成 Authenticode 签名的密钥相同。
      

  3.   

    以上描述引自msdn参考
    ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconstrong-namedassemblies.htm
    ms-help://MS.VSCC/MS.MSDNVS.2052/cpguide/html/cpconstrongnamescenario.htm