搜集自csdn 

有些开源项目,在编译时会有一大堆的错误,其中最常见的是:  
  对程序集“XXX.dll”签名时加密失败   --“读取密钥文件“XXXX.snk”时出错   --   系统找不到指定的文件。 ”

     原因是没有密钥文件,可以使用这样的方法创建一个密钥文件:  
        1,找到签名工具sn.exe,默认的路径是:系统盘:/Program   Files/Microsoft   Visual   Studio   .NET   2003/SDK/v1.1/Bin;(如果没有的话通过搜索sn.exe来查找)  
        2,选择桌面上的“我的计算机”图标,右击,属性/高级/环境变量/系统变量/新建/系统变量 ,弹出新建系统变量对话框,如下设置:  
          变量名:path    
          变量值:系统盘:/Program   Files/Microsoft   Visual   Studio   .NET   2003/SDK/v1.1/Bin;  
        3,打开命令行,执行  
              C:  
              sn   -k   XXX.snk  
              会在c盘中生成一个XXX.snk文件,把他剪贴到/XXX/obj/目录下。  
          编译就可以通过了。  
   
          或者最直接的方法就是,不要签名了,找到XXX项目的AssemblyInfo.cs文件,注释掉下面一行:  
          [assembly:   AssemblyKeyFileAttribute("..XXX.snk")]  
          编译就可以通过了。  
   
   
  下面简单的解释以下strong   name:  
  (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpguide/html/cpconStrong-NamedAssemblies.asp)  
          加密签名是计算机安全方面的名词,加密分为对称和非对称加密,这里用的是后者,  
   
          strong   name是进行程序集版本控制和名称保护的,对一个程序集进行签名后就会得到一个strong   name。strong   name由以下几部分组成程序集的标识(即它的简单文本名称),版本号和区域性信息(如果提供的话),以及公钥和数字签名。strong   name可以确保一个程序集名称的唯一性。强名称是使用相应的私钥,通过程序集文件(包含程序集清单的文件,并因而也包含构成该程序集的所有文件的名称和散列)生成的。  
          需要强调的是,是对程序集的加密和签名(包括名称,版本等信息)得到强名称,强名称是唯一的,所以程序集也是唯一的,程序集加密签名成strong   name需要使用私钥,这个私钥由keyname和keyfile组成,其中KeyName   是指已经安装在计算机上的加密服务提供程序(CSP)中的密钥。KeyFile   是指包含密钥的文件(其实就是.snk文件)。KeyFile通过sn.exe生成。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐