更具体地说,是一个类库程序集。我的初步想法:
- 让一些指定的管理员进行所有程序集签名。但是当错误修复和新版本被编写时,二进制文件最终将取决于它们是否存在(即使只是出于私有(private)原因的小改动)。
- key 可以公开获得。但这违背了公钥加密实践,并且您失去了信任和身份的优势。
- 允许最终开发人员和分销商使用自己的 key 对其进行签名。但是随后您失去了模块化,因为每个新签名都会使其与其他一些版本不兼容。
当然,您可以不在程序集上签名。但是,如果另一个需要对其程序集进行签名的项目引用了您的库,则会出现编译错误。
我最近在维护的一个开源项目中遇到了同样的问题。这是我解决这个问题的方法:
- 源代码始终可通过存储库下载,但发布将包含源代码快照和编译版本。
- 在提供编译版本之前,我使用我的私钥对程序集进行签名。
因此,在您的情况下,准备发布的人应该拥有 key 。库开发人员根本不需要了解它。
如果最终用户想要重新编译并使用他们自己的 key 签名,那很好。您可以通过比较签名程序集中存在的公钥来区分您和其他人的二进制文件。让公钥可用,其他人也可以这样做。
当 InternalsVisibleToAttribute
用于引用具有强名称的程序集时,管理此过程会变得有点麻烦。您可以阅读我如何解决该问题 here .