0

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

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

  2. 变量“NavigationControl”要么未声明,要么从未赋值。

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

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

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

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

4

1 回答 1

0

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

有两种选择:

1)您根本没有在开发人员机器上签名。仅在构建服务器上签名。

或者

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

无论如何,您都可以注册将验证的密钥。出于显而易见的原因,这只是DEV MACHINE!不要在生产机器上使用,否则您的整个签名概念将走向南方。

您需要检查机器上 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);
于 2013-09-11T15:38:27.813 回答