C# VS2010设计器找不到类型UserControl、具有清单和延迟签名的强名称程序集

C# VS2010设计器找不到类型UserControl、具有清单和延迟签名的强名称程序集,c#,visual-studio-2010,user-controls,windows-forms-designer,strongname,C#,Visual Studio 2010,User Controls,Windows Forms Designer,Strongname,我在尝试打开winforms表单时得到这个消息 找不到类型“MyCompany.MyControls.MyControl”。请确保包含此类型的程序集是 参考。如果此类型是开发项目的一部分,请 确保已使用的设置成功生成项目 您当前的平台或任何CPU 变量“NavigationControl”未声明或从未分配 程序集是使用“仅延迟签名”进行签名的,因为我在生成后事件中包含了带有mt.exe的清单。在这里,我还使用sn.exe对程序集重新签名: sn.exe -R "$(TargetPath)" "$

我在尝试打开winforms表单时得到这个消息

  • 找不到类型“MyCompany.MyControls.MyControl”。请确保包含此类型的程序集是 参考。如果此类型是开发项目的一部分,请 确保已使用的设置成功生成项目 您当前的平台或任何CPU

  • 变量“NavigationControl”未声明或从未分配

  • 程序集是使用“仅延迟签名”进行签名的,因为我在生成后事件中包含了带有mt.exe的清单。在这里,我还使用sn.exe对程序集重新签名:

    sn.exe -R "$(TargetPath)" "$(ProjectDir)key.snk"
    
    如果我完全禁用对程序集的签名,它就会工作


    还有别的办法吗?我假设VS2010正在使用错误的强名称或其他内容查找DLL…

    您的程序集已延迟签名。这意味着,它有一个签名,但该签名无效(只有稍后由buildserver使用真实密钥构建时才有效)。因此,在开发人员计算机上,签名无效,并且未加载程序集

    有两种选择:

    1) 您根本不在开发人员机器上签名。仅在生成服务器上登录

    2) 确保开发人员机器将延迟签名密钥视为有效,尽管它不是

    无论发生什么情况,您都可以注册将进行验证的密钥。出于显而易见的原因,这只是开发机器不要在生产机器上使用,否则您的整个签名概念都会过时

    您需要检查机器上sn.exe的路径,它可能不同:

    “C:\Program Files(x86)\Microsoft SDK\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe”-Vr*,YOURKEYHERE

    “C:\Program Files(x86)\Microsoft SDK\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\sn.exe”-Vr*,YOURKEYHERE

    您需要以管理员身份运行这些命令,然后重新启动

    YOURKEYHERE是程序集的公钥令牌,执行此操作时,位于PublicKeyToken=之后的部分:

    Console.WriteLine(typeof(ATYPEOFYOURASSEMBLY).AssemblyQualifiedName);