VS2010 设计器找不到类型用户控件、具有清单和延迟签名的强名称程序集

本文关键字:延迟 程序集 强名称 找不到 类型 控件 用户 VS2010 | 更新日期: 2023-09-27 18:31:00

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

  1. 找不到类型"MyCompany.MyControls.MyControl"。请确保包含此类型的程序集是 引用。如果此类型是开发项目的一部分,请使 确保已使用 您当前的平台或任何 CPU。

  2. 变量"导航控制"要么未声明,要么从未分配。

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

sn.exe -R "$(TargetPath)" "$(ProjectDir)key.snk"

如果我完全禁用程序集的签名,它可以工作。

还有其他方法可以做到这一点吗?我假设VS2010正在寻找使用错误的强名称或其他东西的DLL...

VS2010 设计器找不到类型用户控件、具有清单和延迟签名的强名称程序集

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

有两个选项:

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

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

无论如何

,您都可以注册将验证的密钥。出于显而易见的原因,这只是开发机器!不要在生产机器上使用,否则您的整个签名概念将下降。

您需要检查 sn 的路径.exe在您的计算机上它可能有所不同:

"C:''Program Files (x86)''Microsoft SDKs''Windows''v8.0A''bin''NETFX 4.0 Tools''sn.exe" -vr *,YOURKEYHERE

"C:''Program Files (x86)''Microsoft SDKs''Windows''v8.0A''bin''NETFX 4.0 Tools''x64''sn.exe" -vr *,YOURKEYHERE

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

YOURKEYHERE 是程序集的公钥标记,当你这样做时,PublicKeyToken= 之后的部分:

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