如何比较2个不可知的.net程序集版本或更改版本

时间:2018-07-11 13:53:34

标签: version .net-assembly

源条件:有专有的NuGet存储库,2个或更多构建服务器,一个包含2个或更多库的解决方案。可以随时在任何构建服务器上启动该构建。问题是如果二进制文件已更新,则将库自动部署到NuGet存储库。

挑战是这样。当一个库项目开始构建时,我们不知道生成的程序集是否与已经部署到NuGet存储库的程序集不同。要比较生成的二进制文件,它们的版本必须相同,并且必须在Deterministic属性设置为true的情况下进行构建。因此,在构建开始时,我可以检查部署到NuGet存储库的库的当前版本是什么,在AssemblyInfo中设置该版本并进行构建。构建完成后,我可以比较二进制文件。如果它们相同,则无需部署。这种情况很容易。

如果二进制文件不同,该怎么办?在这种情况下,我需要更改当前生成的程序集版本,但是如果不重建库就无法执行此操作,对吗?组装后的装配体版本是否可以更改?

我看到的另一种选择是始终在构建中增加库版本,但是在这种情况下,我需要比较两个程序集二进制文件,以便不使用版本,因为我不在乎版本号,我唯一关心的是程序集的代码是相同的。

所以一切都归结为两个问题:

  1. 是否可以直接在二进制文件中更改程序集版本,而无需重新构建或拆卸和重新组装它?

  2. 是否可以比较两个程序集而不考虑它们的版本,只比较IL代码二进制文件部分而无需拆卸和重新组装?

我在论坛上发现了一些想法,例如基本上使用ILMerge来重新打包程序集或使用ildasm / ilasm,但这似乎太多了,使用不同版本重建库可能更好。

谢谢

0 个答案:

没有答案