关于“Assemblies Should Have Valid Strong Names 程序集应该拥有一个有效的强名称”的分析与解决 转

 

关于“Assemblies Should Have Valid Strong Names 程序集应该拥有一个有效的强名称”的分析与解决

      之前帮同学开发了一个游戏的小外挂,运行成功以后带着小小的虚荣心用FXCOP分析了一下,遇到了这么样一个提示:

     CriticalError, Certainty 95, for AssembliesShouldHaveValidStrongNames

     当时百度了一下,在MSDN大致了解了是怎么回事,但没有找到解决办法,各方解释的材料基本同源,比较晦涩。因为问题不大,当时就懒得去管了。今天翻看枕边书《.NET框架程序设计(修订版)》(Jeffrey Richter,李建忠译)的时候忽然想起那个问题,书上讲得很清楚。

     一般项目发布成exe或者dll文件,不同的公司和个人很容易发布出相同名称的程序集来,形成DLL hell问题。.NET为了避免该问题引入了强命名程序集。要求包括:文件名、版本号、语言文化标识和公有密钥标记。前三者从项目自带的AssembliyInfo里面寻找。最后一个公有密钥标记则要自己弄。方法是:

1、命令行CMD,进入C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin,找到SN.EXE文件

    注意,各人的路径可能不一样,建议本机搜索下,我在网上找的地点都不尽相同

2、输入 SN -K ClarkApp.keys   产生自己公司或个人的钥文件(该文件包含公钥和私钥)。ClarkApp可以自己设置

3、把产生的公钥文件ClarkApp.keys拷贝到项目中

4、在命名空间上加入 

[assembly: AssemblyKeyFile( " ClarkApp.keys " )]
namespace  test
{
    
     
public   class  Class1
     {
         
//
     }
}

 

     再编译文件,再FXCOP分析,发现原来的代码检查结果少了一行,质量又上了一层^_^

 

注:公钥文件可以直接用UE查看,另外可以用以下方式查看

第一步:分离出公钥到一个新文件。输入sn -p ClarkApp.Keys Clarkapp.publickey

第二步:查看。sn -tp ClarkApp.PublicKey

另外,因为是给程序集做标记,同一个项目即使有多个命名空间只要有一个上面注明了AssemblyKeyFile就可以了

你可能感兴趣的:(name)