我正在开发一个旨在简化动态编写程序集的项目,我一直在尝试解决的一件事是如何使用强名称对程序集进行签名,不依赖用于构造强名称的辅助程序(例如 sn.exe)。文档提到它使用 SHA1 作为哈希算法,但至于如何正确设置强名称,我还无法推断。
我尝试使用随机字节数组的 SHA1 结果创建强名称,但将 PublicKey 和 PublicKeyToken 设置为它所暗示的内容(公钥是我创建的字节数组的哈希值,或者字节-array 我创建的)并将公钥 token 设置为 SHA 哈希的最后八个字节,我在调用 AssemblyBuilder.Save() 方法时收到错误。
每次我收到一个异常,说公钥无效。我是否遗漏了什么?
提前致谢。
最佳答案
您可以尝试使用ICLRStrongName界面。没有托管 API 可以执行相同的操作,因此您必须使用 P/Invoke 从托管程序集中调用它们。我想,使用自定义开关从程序中调用强名称工具而不是重新实现它会容易得多,但如果您确定,非托管 API 将是一种方法不想使用sn.exe
。
关于c# - 动态创建强名称,无需 Sn.exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8857080/