使用 Dotfuscator 处理具有强名称的程序集

具有强名称的程序集是有数字签名的。这样,运行库就可以确定程序集在签名之后是否已经改变。签名是一个用 RSA 公钥/私钥对的私钥签名的 SHA1 哈希。签名和公钥都嵌入到程序集的元数据中。

由于 Dotfuscator 可修改程序集,因此在通过 Dotfuscator 运行程序集之后进行签名是必需的。

Dotfuscator Professional Edition 可以将此步骤作为模糊处理过程的一部分进行处理。如果要使用 Community Edition,则需在完成模糊处理之后的一个单独的生成步骤中完成签名。

在模糊处理之后手动重新签名

您应该在开发过程中和在使用 Dotfuscator 处理之前延迟签名程序集,日后再完成签名过程。有关延迟签名程序集的详细信息,请参考 .NET Framework 文档。

若要成功模糊处理具有强名称的程序集,请按以下步骤操作:

  • 在开发期间延迟签名程序集。此操作可通过在程序集中嵌入两个自定义属性完成。对于 C#,AssemblyInfo.cs 中会包含下面的行:
[assembly:AssemblyKeyFileAttribute("keyfile.snk")] [assembly:AssemblyDelaySignAttribute(true)]
  • 其中 keyfile.snk 是包含公钥的文件的名称。
  • 使用 .NET Framework 附带的强名称工具 (sn.exe),在测试程序集时禁用强名称验证:
sn -Vr TestAsm.exe
  • 使用 Dotfuscator 模糊处理延迟签名的程序集。
  • 运行 Dotfuscator 之后,使用 sn.exe 启用对经过 Dotfuscator 处理的程序集的验证。此操作可注消经 Dotfuscator 处理的程序集,以便跳过验证:
sn -Vu TestAsm.exe 
  • 现在,便完成了对经过 Dotfuscator 处理的程序集的签名过程,其中 keyfile.snk 是包含私钥的文件的名称:
sn -R TestAsm.exe keyfile.snk

请注意,在测试延迟签名的程序集时,要禁用强名称验证!

© 2002-2007 PreEmptive Solutions. 保留所有权利。