WPF 框架开发 更改 API 之后让 CI 重新创建 API 兼容检查基准

62 篇文章 22 订阅

本文是记录在开发 WPF 框架遇到的问题。
在 WPF 框架里面,限制了 API 的变更,所有关于 API 的变动都会触发 API 兼容检查。只有在明确此 API 变更是合理的之后,才能被接受更改。而此兼容判断将会让一些本地构建失败,本文将告诉大家如何使用官方的方法重新创建 API 基准,让本地构建通过

本文的 WPF 框架开发指的是给 WPF 这个框架进行开发,而不是基于 WPF 开发应用。当前整个 WPF 已完全开源,任何人都可以获取所有源代码以及参与开发

在 WPF 框架里面,限制了 API 的变更,表现就是在 CI 的时候,如果发现了存在 API 的变更,那么将 CI 不通过,提示代码如下

 error : TypesMustExist : Type 'Path_to_my_class' does not exist in the implementation but it does exist in the contract
. [...\src\PresentationFramework\PresentationFramework.csproj]
...\eng\WpfArcadeSdk\tools\ApiCompat.targets(239,5): error : ApiCompat failed for '...\artifacts\bin\PresentationFramework\Debug\netcoreapp5.0\PresentationFramework.dll' [...\src\Microsoft.DotNet.Wpf\src\PresentationFramework\PresentationFramework.csproj]

上面代码提示的 ApiCompat.targets(239,5): error : ApiCompat failed 就是告诉开发者说 API 兼容判断不通过

如果我明确是需要接受此 API 变更的,如加入新方法或者删除某个属性等,那么只需要重新运行生成 API 兼容数据就可以了。此时将自己的变更加入到 API 兼容数据里

重新运行的方法是在 Build.cmd 里面加上 BaselineAllAPICompatError 参数,如下面代码

Build.cmd /p:BaselineAllAPICompatError=true

官方文档请看 wpf/Documentation/api-compat.md

当然了,如果在进行频繁更改,那么不断执行重新生成 API 兼容数据,是一件低效率的事情。另一个方法就是不开启 API 兼容判断,做法就是删除 ApiCompat.targets 的判断代码,代码放在 https://github.com/dotnet/wpf/blob/d5673edfbd274e4081d46d377ca4c0e6d3028ae2/eng/WpfArcadeSdk/tools/ApiCompat.targets#L239 请在你本地找到对应的代码删除

<Error Condition="'$(ApiCompatExitCode)' != '0'" Text="ApiCompat failed for '$(TargetPath)'" /> 

在 eng/WpfArcadeSdk/tools/ApiCompat.targets 找到上面代码,删除上面代码就可以

特别感谢 Ryland 大佬告诉我这个方法

当前的 WPF 在 https://github.com/dotnet/wpf 完全开源,使用友好的 MIT 协议,意味着允许任何人任何组织和企业任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。在仓库里面包含了完全的构建逻辑,只需要本地的网络足够好(因为需要下载一堆构建工具),即可进行本地构建

知识共享许可协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF(Windows Presentation Foundation)是一种用于创建Windows应用程序的框架,它提供了丰富的图形性能和交互性能,使得开发人员可以轻松地构建现代化且具有吸引力的用户界面。WPF具有强大的UI设计和布局功能,能够自定义样式、主题和动画效果,使应用程序的用户界面更加吸引人。 WebAPI是一种用于构建Web服务的框架,它可以通过HTTP协议实现与客户端之间的通信。WebAPI基于REST原则,使用简洁的HTTP方法(如GET、POST、PUT、DELETE等)来执行各种操作。它能够返回各种格式的数据,如XML、JSON等,并支持身份验证和授权等常见的Web开发功能。 将WPF和WebAPI结合使用可以实现丰富的客户端-服务器应用程序。WPF作为客户端应用程序的前端,负责呈现用户界面、处理用户交互和数据展示。WebAPI作为后端服务,负责处理客户端的请求,执行业务逻辑并提供数据。两者之间通过HTTP通信进行数据传输,可以实现实时数据更新和双向通信。 借助于WPF的强大的UI设计和交互性能,开发人员可以创建直观而灵活的用户界面,与WebAPI进行数据交互,并实现数据的展示和操作。通过WPF的数据绑定机制,可以轻松地将WebAPI返回的数据绑定到UI元素上,实现数据的实时更新和展示。 总之,WPF和WebAPI相互结合能够实现流畅且响应迅速的客户端-服务器应用程序。WPF提供了强大的UI设计和交互性能,而WebAPI则提供了灵活的后端服务,通过这种结合可以满足各种复杂的应用程序需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值