是否自动检查C#DLL版本之间的二进制不兼容?

问题描述 投票:-1回答:1

我正在寻找任何自动方式来检查C#DLL版本之间的二进制不兼容。

类似于Unix C ++的abi-compliance-checker,但是对于.NET,尤其是对于C#,将是很棒的。此abi-compliance-checker给出了我希望获得的有关两种不同版本的C#API的信息的屏幕截图。

如果没有任何直接等效项,那么完全获取有关any自动方法的任何信息也将很有帮助,以确保库版本之间的二进制兼容性不会被破坏。

SO answer似乎是堆栈溢出中破坏API的权威列表。还有This question讨论了其中一些问题。 (当然,Internet上对此问题还有许多其他讨论;尽管有很多讨论集中在C ++上,而不是C#和.NET上,这是我在这里要问的。)

除其他事项外,这些文章有助于明确说明:

  • 二进制和编译兼容性和不兼容性不是小问题!
  • 二进制(不兼容)并不总是需要编译(不兼容),反之亦然

    • 尽管(在这里可能值得注意)至少一个Microsoft an article by Jon Skeet错误/误导性地指出它在一个方向上运行
  • 存在不同程度的不兼容:特别是,有些晦涩的事情,特别是与反射有关,库的用户可以这样做,这会使某些API更改与二进制不兼容,而在其他情况下则不会

    • 作为旁注,这几乎使现实世界中的不兼容性不是一个是/否的问题:在理论上会有某些不兼容的更改,您很可能会在API的主要版本中进行准备,如果您不希望API的普通用户使用它来做这些更晦涩的事情]
    • 这与上面链接的SO答案的article on the topic屏幕截图中显示的不兼容的严重程度相符

因此,考虑到如今每个人都应该使用语义版本控制来更新其API,并且还考虑到每个人都在使用测试套件,甚至还有开发人员,那么每个人-甚至每个人都怎么样? -自动测试.NET中的二进制不兼容更改?

我可以看到,仔细使用测试套件就足以让您知道是否进行了编译兼容性更改,并且大多数项目已经具有此功能-因此,为什么我的问题是关于二进制不兼容性更改的,而这似乎并没有可以在我查看或从事的任何项目中自动检测到。

仅阅读以上文章并注意可能还不够……(尽管这是某种开始),但是我找不到任何其他方法的文档。

c# automated-tests abi
1个回答
-1
投票

作为对我自己问题的非常部分的回答,并且在某种基础上总有总比没有好。在我看来,这似乎是一个可能的实用答案(即,它肯定不会解决所有可能的问题,但应该至少要抓住一些……)将是存储旧测试套件的编译版本,然后检查它们是否仍针对已编译的API新版本运行。

我假设这是某种答案,因为在我从事的大多数OSS项目中,测试和库是同时编译的;因此,在这样的项目中,仅以二进制不兼容的方式(即二进制而不是编译不兼容)的任何事物都不会以正常方式运行正常测试而导致失败。但是我建议的内容至少会出现一些此类问题。

所以我不只是说“拥有测试套件”来回答我的问题!我建议的一件事,与我通常认为的测试套件所做的不同,可以解决我所要解决的问题。

© www.soinside.com 2019 - 2024. All rights reserved.