我有一个移动.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
{
...
}
此表单位于导致警告的业务层中。在设计器中查看时,从此基本表单继承的每个表单都会导致问题。
答案 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.
请注意,要加载和分析延迟签名的程序集,必须禁用程序集的验证。