我有一个项目,我想强力命名可执行文件。使用命令行编译效果很好:
csc ... / keyfile:...
但我希望IDE能够这样做,所以我发现:在项目属性的“签名”选项卡中,有一个“签署程序集”选项。我勾选它并指向我的密钥对文件。在我调试之后,FileNotFound异常出现在一个无关紧要的地方:(我的应用程序使用序列化)
protected override Type d(Stream st)
{
BinaryFormatter bf = new BinaryFormatter();
return (Type)bf.Deserialize(st);
}
在我进行此配置之前,应用程序正在运行。
答案 0 :(得分:3)
您需要适当地配置BinaryFormatter的Binder属性。以下是如何执行此操作的示例:http://spazzarama.wordpress.com/2009/06/25/binary-deserialize-unable-to-find-assembly/
答案 1 :(得分:2)
我假设您正在读回使用未签名应用程序编写的数据。该数据现在变得不兼容,Deserializer无法匹配类型。
我不确定如何解决这个问题(很快),但也许您可以先通过编写和阅读已签名的应用程序来确认这一点,这应该可行。
最好将所有序列化类型保存在单独的程序集中。
答案 2 :(得分:1)
两个回复都非常好。
添加我的1便士:这称为 TYPE FIDELITY ,这只能通过二进制序列化而不是XML或任何其他类型的序列化。