程序集“未正确签名”。警告

时间:2008-10-17 01:22:42

标签: .net .net-2.0 assemblies code-signing

我有一个移动.NET解决方案,并决定签署程序集。 编译完成没有错误,但提供警告

'CompactUI.Business.PocketPC.asmmeta,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未正确签名。

应用程序工作正常,但我无法再使用此程序集打开表单的设计器。设计师再次说

'CompactUI.Business.PocketPC.asmmeta,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'未正确签名。

使用堆栈信息:

at Microsoft.CompactFramework.Build.AsmmetaBindingService.GetAsmmetaAssembly(String sourceAssemblyPath,Boolean verify) 在Microsoft.CompactFramework.Build.AsmmetaBindingService.LoadAsmMetaAssembly(程序集sourceAssembly,String hintPath,IDeviceTypeResolutionService解析程序) 在Microsoft.CompactFramework.Build.MetadataService.GetAsmmetaType(Type sourceType) 在Microsoft.CompactFramework.Build.MetadataService.GetTypeAttributes(Type desktopType) 在Microsoft.CompactFramework.Design.DeviceCustomTypeDescriptor.GetAttributes() ...

造成这种情况的原因是什么?

编辑:尼古拉斯建议不解决问题

我有一个包含公共属性的Form,它是表示层中每个表单的基础

public class CustomForm : Form
{
    ...
}

此表单位于导致警告的业务层中。在设计器中查看时,从此基本表单继承的每个表单都会导致问题。

3 个答案:

答案 0 :(得分:1)

验证是否未使用“延迟符号”设置生成程序集。当它只有null占位符时,这会导致程序集宣传它已签名。这将导致强名称验证失败。有关详细信息,您还可以在MSDN上查看此页面:“Assemblies should have valid strong names

答案 1 :(得分:0)

我很困惑,你说你签了assmeblies但你的公钥令牌是null,如果你签了这个assmbley那么你应该指定生成的公钥而不是null。也许我不完全理解这个问题。尝试删除对CompactUI.Business.PocketPC.asmmeta的引用,然后重新添加签名版本。

答案 2 :(得分:-2)

原因

如果没有计算机的当前注册表设置,则程序集未使用强名称签名,强名称无法验证,或强名称无效。  规则说明

此规则检索并验证程序集的强名称。如果满足以下任何条件,则发生违规:

* 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.

强名称可以保护客户不会在不知不觉中加载已经被篡改的程序集。不应在非常有限的情况下部署没有强名称的程序集。如果共享或分发未正确签名的程序集,则程序集可能会被篡改,公共语言运行库可能无法加载程序集,或者用户可能必须在其计算机上禁用验证。没有强名称的程序集存在以下缺点:

* 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.

请注意,要加载和分析延迟签名的程序集,必须禁用程序集的验证。