[FxCop.设计规则]2. 程序集应该拥有一个有效的强名称

原创 2005年05月12日 22:54:00

2.     程序集应该拥有一个有效的强名称

原文引用:

Assemblies should have valid strong names

TypeName:

AssembliesShouldHaveValidStrongNames

CheckId:

CA2210

Category:

Microsoft.Design

Message Level:

CriticalError

Certainty:

95%

Breaking Change:

NonBreaking


Cause: An assembly is not signed with a strong name, the strong name could not be verified, or the strong name would not be valid without the current registry settings of the computer.

Rule Description

This rule retrieves and verifies the strong name of an assembly. A violation occurs if any of the following are true:

  • The assembly does not have a strong name.

  • The assembly was altered after signing.

  • The assembly is delay-signed.

  • The assembly was incorrectly signed, or signing failed.

  • The assembly requires registry settings to pass verification. For example, the Strong Name tool (Sn.exe) was used to skip verification for the assembly.

The strong name protects clients from unknowingly loading an assembly that has been tampered with. Assemblies without strong names should not be deployed outside of very limited scenarios. If you share or distribute assemblies that are not correctly signed, the assembly can be tampered with, the common language runtime might not load the assembly, or the user might have to disable verification on his or her computer. An assembly without a strong name suffers from the following drawbacks:

  • Its origins cannot be verified.

  • The common language runtime cannot warn users if the contents of the assembly have been altered.

  • It cannot be loaded into the global assembly cache.

Note that to load and analyze a delay-signed assembly, you must disable verification for the assembly.

How to Fix Violations

To fix a violation of this rule, use the Strong Name tool (sn.exe) to create a key file and sign the assembly with a strong name using one of the following procedures:

When to Exclude Messages

Only exclude a message from this rule if the assembly is used in an environment where tampering with the contents is not a concern.

引起的原因:

1.  程序集没有使用强名称进行签名

2.  强名称不能被校验

3.  该程序集的强名称依赖于当前计算机的设置才有效。

描述:

这个规则读取并校验一个程序集的强名称,下面任何一条都会引起这条规则校验失败:

1.  这个程序集没有进行强名称签名

2.  进行签名后,这个程序集被修改过。

3.  程序集被设置成延迟签名

4.  程序集签名失败

5.  程序集需要一定的注册表设置才能通过强名称校验

例如:通过强名称工具(Sn.exe)设置跳过对这个程序集的强名称确认

 

强名称保护用户不会使用一个被篡改的程序集。一个没有强名称的程序集只能被使用在非常小的范围内。如果你分发一个没有进行正确签名的程序集,将不能保证它没有被篡改。如果用户没有设置忽略强名称确认,CLR将会拒绝载入这个程序集。

 

不对程序集进行强名称签名会有如下缺点:

1.  程序集的来源将不能被保证

2.  用户将无法知道程序集被篡改过

3.  程序集不能被载入GAC(全局程序集缓存)

如果需要分析一个延迟签名的程序集,必须禁用这条规则。

修复:

使用强名称工具生成Key文件,并用这个文件签名程序集。你可以使用下面的一种方法签名这个程序集:

1.  使用.NET Framework SDK中的程序集连接工具(Al.exe)

2.  .NET Framework v1.0v1.1中,使用System.Reflection.AssemblyKeyFileAttributeSystem.Reflection.AssemblyKeyNameAttribute属性标记程序集。

3.  .NET Framework v2.0中,使用/keyfile或者/keycontainer编译指令。(在C++中,使用/KEYFILE or /KEYCONTAINER连接指令)

mvc4源码调试“未能加载文件或程序集“System.Web.Mvc”或它的某一个依赖项。未能验证强名称签名。解决办法

环境vs2015+win7x64+.net 4.5 system.web.mvc中版本改成4.0.0.1 个人测试mvc项目中根目录web.config改                  ...

图解.net程序集赋予强名称

从开始菜单打开VS命令提示; 输入下图命令;生成的文件保存了公钥/私钥对; 利用下面命令可提取出公钥部分; 查看公钥; 新建一个.net窗体程序...

强程序集名称 & GAC 介绍

使用强名称的步骤: 1、创建密匙文件(.snk文件),打开vs command,输入:sn.exe -k 密匙文件名称.snk 2、将密匙文件加入到工程中csc /t:librar...

C#关于程序集生成失败【引用DLL及第三方DLL没有强名称的解决办法】

C#关于程序集生成失败及引用DLL及第三方DLL没有强名称,一个Assembly希望封装成为ActiveX/COM组件,那么它必须拥有强名(Strong Name),也就是说在编译的时候需要指定S...

引用程序集没有强名称解决办法

为项目添加强名称方法: 1.右键单击项目,打开属性窗口; 2.在属性窗口里选择《签名》标签,选中为程序集签名的选项,在下拉列表里选择新建,如下图所示: 3.打开新建签名窗口,...

引用程序集没有强名称解决办法

引用程序集没有强名称解决办法(http://www.cnblogs.com/tearer/archive/2010/09/01/1814655.html) 为项目添加强名...

.net程序集强名称签名实践

      强名称是由程序集的标识加上公钥和数字签名组成的。其中,程序集的标识包括简单文本名称、版本号和区域性信息(如果提供的话)。强名称是使用相应的私钥,通过程序集文件(包含程序集清单的文件,并因而...

Asp.net中强签名dll:引用程序集没有强名称解决办法

本文呢,意在和大家共同学习一下如何对自己的Dll文件实现强签名,在一定程度上防止别人反编译和破解,具体为项目添加强名称方法如下三步走: 1.右键单击项目,打开属性窗口; 2.在属性窗口里选择《签名...
  • llxchen
  • llxchen
  • 2013年04月16日 15:38
  • 2896

建议120:为程序集指定强名称

建议120:为程序集指定强名称 虽然强名称在设计之初有防止被未授权的第三方软件非法执行程序的作用,但是因为它的破解方法并不难,所以现在强名称更多的意义在于它可以避免出现“DLL HELL”现象。 ...
  • houwc
  • houwc
  • 2016年09月12日 10:57
  • 160
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[FxCop.设计规则]2. 程序集应该拥有一个有效的强名称
举报原因:
原因补充:

(最多只允许输入30个字)