我有一个提供 API 的程序集,并由其他一些程序集使用。我需要验证新版本的 API dll 是否仍然与使用旧版本 API 的旧程序集兼容。
我发现了几个提出相同问题的问题,但没有答案可以解决我的问题:
- 验证公共 API 兼容性的工具 https://stackoverflow.com/questions/3090792/tool-to-verify-compatibility-of-a-public-apis
- C#/.NET API 向后兼容工具 https://stackoverflow.com/questions/2377855/tool-for-backwards-compatibility-for-the-c-net-api
建议的工具只能比较两个程序集并判断 API 中是否可能存在重大更改,但不能判断最新的 API 是否确实破坏了使用它的旧程序集。
我想找到一个工具或编写一个测试来检查每个旧的 dll 是否可以与我的新 API dll 一起使用。
至于 API 的更改,我更有可能只会扩展它,但即使它仍然会破坏旧程序集中的代码。此类更改的一些示例可以在此处找到:
- .NET 中 API 重大更改的明确指南 https://stackoverflow.com/questions/1456785/a-definite-guide-to-api-breaking-changes-in-net
- .NET:关于 AssemblyVersion,什么定义了二进制兼容性? https://stackoverflow.com/questions/768832/net-with-respect-to-assemblyversion-what-defines-binary-compatibility
目前,我看到的唯一解决方案是使用最新的 API 编译旧程序集的源代码,但我只想对程序集执行此操作,并将它们添加为单元测试的一部分。我有更好的方法可以处理吗?
edit:
我正在寻找一种工具,能够自动验证 .net 程序集之间的向后兼容性的过程。 (命令行或一些API)
您想要的是进行比较并生成重大更改列表。然后您想要搜索您的程序集是否确实使用了任何损坏的 API。您可以使用 ApiChange 工具来执行此操作,以进行比较并找到任何受影响的用户。
使其更加具体。如果您从接口中删除了一个方法,那么您需要在使用该接口方法的类或任何实现该方法的类中找到该方法的所有实现者和用户。
ApiChange 可以使用命令 -whoimplementsinterface 和 -whousesmethod 在命令行上搜索特定方法的实现者和用户。它不是在命令行中自动执行的,但您可以直接使用 ApiChange.Api.dll 来自动执行此查询。
Edit1:
我只是忘记了:ApiChange 工具实际上有你已经感兴趣了。这是选项
-ShowrebuildTargets -new -old [-old2 ] -searchin
我们确实在我们部门使用了它,并取得了良好的效果。唯一的问题是 XML Intellisense 文件。如果另一个目标不使用已删除的方法,而是在 XmlDoc 内引用它,则编译器将编写一条警告,指出引用了不存在的方法。这很难捕捉到,并且还涉及解析智能感知文档文件。但这是一个非常极端的情况。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)