14

我试图在我当前的项目中使用ServiceStack,但发现发布的二进制文件名称不够强,所以我无法使用它。当在GitHub上问“为什么”,我得到了以下的答案:对开源项目的二进制文件签名

it's virally toxic and hinders binding, upgrading, development, deployment, etc.

mythz是非常简洁的,所以我不想打扰他越来越要求在这里。我使用了许多开源.NET项目,如AutoMapper,NUnit,Moq,log4net,Ninject等,它们的发布都是强命名的。在这里发现了similar question,但它对我没有帮助。 OSS是否正常?为什么不释放签名和未签名的二进制文件?

回答

6

这里有一个原因,现有的讨论,为什么强命名为开源项目是一个坏主意:

https://groups.google.com/forum/?fromgroups#!topic/getglimpse-dev/pXXazMOOdjE

下面是使用它的噩梦故事:

http://haacked.com/archive/2012/02/16/changing-a-strong-name-is-a-major-breaking-change.aspx

我曾经亲自参加过两代遭受两代Log4Net攻击的团队,他们试图在同一个项目中使用引用两个不同强名称的Log4Net的程序集 - 浪费大量时间和精力努力完成这项工作并不好玩,也不是我们计划自己承担责任或强制所有用户的事情。

想要强名称版本的用户可以自由签署public ServiceStack repos自己的克隆/分支。

如果有需求,我们会考虑维护我们自己的“正式烧钱”商业版本的图书馆。

+2

感谢您的链接,相当有趣,但我必须注意到,这些人混合签名和版本 - 不同的事情!尽管在.NET中,世界签名是强名的一部分,但在发布新版本时不需要更改版本(log4net版本方案;相反,它们可以使用文件版本控制并保持IL版本相同)。我发现释放未签名的二进制文件没有问题,使用相同的IL版本签名,并使用递增的IL版本进行签名。所有人都可以选择快乐,因此当您重新考虑维护“官方签名”二进制文件时,这里是我的+1。 – UserControl 2012-07-26 06:02:34

+2

您不能'验证'具有非强名称依赖性的标志组件。就个人而言,这是一场噩梦*而非*易于访问强大的命名组合并大量妨碍部署。 – Robin 2013-10-11 13:50:25

+3

我意识到我在这里参加派对有点迟,但我真的没有看到签署装配的问题。如果您继续使用相同的密钥,以什么方式签署问题?不要使用汇编重定向来解决版本控制问题? – dabide 2013-10-24 21:34:04

5

我认为这取决于开发人员。优点是明确的 - 任何人都可以以强大的名称进行组装,并在任何环境中使用它。在这个特殊情况下,我的意思是从签名或未签名的程序集。缺点 - ?

我认为它应该是一个有点绅士规则签署二进制文件

乔恩Skeet回答类似question和他的意见是相当难以忍受的。

相关问题