本文由葡萄城技术团队于博客园原创并首发

转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。

前言

随着 .NET 平台的出现,报表相关的开发控件随着而来,已经有若干成熟的产品可供开发人员使用,本文旨在通过从不同维度对比目前最流行的4款 .NET报表控件:水晶报表、FastReport、ActiveReports 和 Stimulsoft,给所有报表开发人员在做产品选型时一份全方位的参考。

为什么需要报表控件

因为微软在中国几十年的推广,.NET作为很多开发团队开发商业项目时首选的开发平台。随着对 Visual Studio IDE的使用,很多开发人员已经习惯了在 VS中完成大量代码的可视化设计、测试以及调试。

而数据报表,作为商业系统中必不可少的功能(或者成为模块),随着这些年大数据、BI、数据决策的流行,数据报表也逐渐成为商业系统中的核心功能(模块)。

于是,报表控件的出现就是为了极大地简化开发人员完成复杂数据报表的设计、调试、预览、打印、导出等功能代码开发,让开发人员能够将精力和时间投入到数据整理、准备以及UI方面。

从最早的微软报表SSRS(SQL Server Reporting Services),水晶报表,到如今市场各式各样的报表工具,如今各有千秋的报表控件,如何为自己的项目选择最适合的控件成为每个开发人员必须考虑的问题。

常见 .NET报表控件介绍

  • SQL Server Reporting Services(SSRS):它是来自微软的产品。作为SQL Server上的加载项创建。此报表生成器在T-SQL开发人员中非常流行,主要是因为它包含在MS SQL Server数据库中。

  • RDLC: 微软自带的 RDLC 报表,集成到 Visual Studio 当中,是Visual Studio 自带的报表工具,简单易用,也在很多系统开发中得到了广泛的应用。

  • FastReport.NET:具有悠久历史的俄罗斯开发商的产品。FR.NET生成器与Microsoft Visual Studio一起工作,并基于.NET框架。当您安装该程序时,其组件将被添加到VS调色板中。我们在应用程序中使用FR,方法是将组件放置在表单上或通过在代码中连接库。就像SSRS一样,它有一个单独启动的报表设计器,但您可以使用ReportDesigner组件将设计器嵌入到应用程序中。

  • ActiveReports: 已经有20余年历史的老牌报表控件,是 .NET 平台的全方位的报表解决方案,其特点是无须编码实现各类报表设计。特有的矩表控件,旨在解决中国式复杂报表,另在报表打印,呈现等方面行业领先。

  • Stimulsoft Report:Stimulsoft拥有大量的报表相关工具,比如报表生成器,报表设计器,Reports for.NET 、Web、MVC、WPF、Silverlight、Flex、PHP、Java、Mobile、WinRT等。

  • 水晶报表:是由Crystal Services 公司开发的,主要用于设计及产生报表。经过多次收购,已经被SAP 公司收购,从12版本发布到16版本,现在因为水晶报表为SAP 服务,所以更加注重数据分析,而不注重报表易于设计。

全面对比

本文将从以下几个维度对比每款 .NET 报表控件

  • 数据源连接(是否支持跨数据源)

  • 与 Visual Studio 的集成度

  • 报表设计过程(设计器)

  • 中文支持程度

  • 表格类报表开发能力

  • 图表类报表开发能力

  • 浏览器的兼容性

  • 授权及部署

数据源支持以及能否跨数据源链接

在实际的项目中,往往数据会存在各种不同的数据库或文件系统,甚至是在线的动态数据,是否能够支持更多的数据源以及能否同时在一张报表中支持多数据源得数据同时显示并关联,这将极大的简化开发人员的工作。

  • 水晶报表支持常用的数据库 Access, Excel,XML 文件,OLE DB驱动,ODBC 驱动,JDBC 驱动的任意数据库,SalesForce数据等

  • FastReport支持常用的数据库:FastReport使用ADO.NET数据源,号称支持连接到任何数据库,如Access、OLE DB驱动、ODBC驱动、SQL、和XML、CSV数据,并可以对数据进行分类排序、数据过滤。只支持数据库单连,不支持同一张报表中跨多个数据源。

  • StimulSoft Report 支持常用的数据库,Access、Oracle、MySQL、PostgreSQL、SQLite、XML 等,除此之外还支持如Firebird、IBM Db2、Sybase Adaptive Server Enterprise 等。不支持同一张报表中跨多个数据源。

  • ActiveReports 支持常用的数据库:Oracle、SQLServer、Access、XML、CSV、JSON、ODBC驱动、即OLE DB 驱动所支持的数据库 .除了常用的关系型数据库外, ActiveReports 支持运行时绑定数据源,如DataTable 数据源,Object 数据源,Json 数据源等。

    ActiveReports 在连接常用数据库SQL Server,Access,Oracle,Json 等提供的可视的链接窗口,用户不需要记住每一种数据库的连接字符串,的写法,只需要输入对应的用户名和密码,ActiveReports 会自动生成连接字符串,所以对于用户来说如此可以节省很多时间,这点是所有.NET 报表控件中最易用的。并且,ActiveReports是唯一一个自同一张报表支持跨数据源的报表控件。

ActiveReports还有一个亮眼的地方就是【可视化数据查询设计器】,对比了这几个产品的类似设计器后,其他产品最多只能提供两个表的关联,而 ActiveReports 对于表的数量没有限制,而且只需要拖拽数据表到 UI 界面,做相关键的关联就可自动生成 SQL 语句。这也为不熟悉SQL 语法的开发人员提供了方便。

与VS的集成度

基于 .NET 平台开发,Visual Studio IDE 是开发人员最熟悉的工具,如果能够与 Visual Studio IDE 紧密集成,将极大的减少开发时的窗口切换损耗,同时在 IDE 中以熟悉的操作方式能够极大的提高效率。

  • 水晶报表:支持 Visual Studio 2010及以上版本,支持开发WPF、WinForms、ASP.NET 项目模板。

  • FastReport:支持Visual Studio 最新版,支持Visual Studio 2005及以上版本,支持开发WPF、WinForms、ASP.NET、MVC 项目。

  • Stimulsoft Report:支持 Visual Studio 全平台,但是在安装集成后,需要用户手动添加到工具箱。对于在MVC 中和 ASP.NET 中使用HTML5 很多功能不支持,如创建动态报表,钻取功能。所以如果考虑使用HTML5作为输出的话,可能就需要考虑其他产品。
    对于所有内部的报表格式,并不是在各个平台通用的,如内部的MDZ、MDX、MRX 格式,只能在 WinForms、WPF、ASP.NET、MVC 使用。所以要想从一个平台迁移到另一个平台,需要考虑创建通用的报表文件格式。

  • ActiveReports 支持 Visual Studio 2010 及以上版本,支持 Visual Studio 全平台开发,HTML5、 WinForms、ASP.NET、ASP.NET MVC、WPF。

  • ActiveReports 支持 Visual Studio 2010 及以上版本,支持 Visual Studio 全平台开发,HTML5、 WinForms、ASP.NET、ASP.NET MVC、WPF。

报表设计过程(设计器)

  • 水晶报表:设计器风格同 Word 编辑器的风格,多了数据源管理等窗口。习惯使用Word编辑器的用户,可以快速上手。水晶报表设计器只支持一种报表类型,按照区域划分的报表类型,将报表分为不同的保镖头,页眉详细数据区域,报表尾,页脚。

  • FastReport:报表设计器顶部有五个选项可以进行切换的选择需要的设置左边是工具栏的选择,通过双击进行控件的选择,FastReport只支持一种报表类型,按照区域划分的报表类型简称区域报表,将报表分为报表头、页眉、明细、页脚。

  • StimulSoft Report:设计器风格和体验也是与Office 保持一致,所以初次接触 StimulSoft Report不会感觉很陌生。 但要是要开始创建报表,可能得需要跟着文档一步一步做。
    StimulSoft Report不提供与Visual Studio的集成报表设计器,所以导致用户无法在Visual Studio中进行报表设计。

  • ActiveReports:报表设计器整体风格与 Visual Studio 一致,显得比较专业,使用上会稍微有点难度,但还好 ActiveReports 提供设计器源码,开发人员可根据需求去自定制整个设计器。包含了报表设计,报表预览,报表导出功能。设计器面向用户群为非技术人员,采用拖拽编辑即可实现全类型的报表设计。
    ActiveReports支持四种报表类型,基于代码的区域报表,基于模板的区域报表,页面报表,RDL报表,用于满足不同的报表设计需求。
    ActiveReports提供集成VS的报表设计器和独立的报表设计器,这样用户在打开 Visual Studio 中就不需要离开Visual Studio 去设计报表。大大提升了开发便利。

中文支持程度

报表控件发布后,最终用户会看到多个和报表控件相关的多个UI组件,参数面板、打印预览、工具条等,除了中文和英文,对其他语种的支持也是考量报表控件适用程度的一个点。

同时,对于报表控件这样入门比较困难的控件,是否能够轻松的获得中文资源、帮助、文档、技术支持,也会决定此控件在项目究竟能否发挥其该有功能的重要前提。

中文UI 支持

  • 水晶报表:支持简体中文,除中文之外还支持其他27种常用语言,这些语言资源文件已经内嵌在产品中;可直接使用。

  • FastReports:支持简体中文,除中文之外还支持其他27种常用语言,这些语言资源文件已经内嵌在产品中;可直接使用。

  • Stimulsoft:内嵌了28种语言支持,设置本地化语言,非常简单,只需要通过切换语言,整个界面会立即切换成当前语言版本,这个使用起来会特别方便,也不需要开发人员去做特殊的本地化设置,再根据操作系统自动切换。

  • ActiveReports 对于语言支持没有限制,已内置好的资源包包含英文,日文,简体中文,如果需要支持其他语言,ActiveReports提供了本地化资源包的要求,这样不管最终用户是什么语言,都可以定制出不同的 UI界面。

中文技术支持

  • 水晶报表:现在属于SAP 公司下的报表工具,在国内没有专门的技术服务团队,相关资料以及服务支持是英文的。因此可能在寻找技术支持过程中会比较耗费时间。而且无法通过直接的沟通来解决,如电话,会议,现场培训等。另外官方网站也是在国外,因为网络问题,可能会导致下载试用过程不顺畅。水晶报表常见问题手册(英文)

  • FastReport:在中国没有专门的技术团队负责产品的售前、售后支持,没有对应丰富的中文资料例如:视频、中文文档,实例demo、论坛。产品提供商也不提供售后技术支持,在购买前需要自己先完全评估好产品,开发中遇到任何技术上的问题都只能自己解决。

  • Stimulsoft:是俄罗斯报表控件厂商,暂时还没有专门的国内支持团队,所有的网站资源均为英文,资源比较全面,如果语言没有障碍的话,资料使用起来也是没有任何问题。与水晶报表存在一个同样令人头疼的问题就是没有国内的支持团队,有任何技术问题要么自己查资料解决,要么得用英文去邮件或线上沟通。

Stimulsoft report 在线帮助文档 常见问题手册

  • ActiveReports:在中国有专业的业务团队,中文资料全面,如中文帮助手册,中文入门视频,中文博客,中文社区支持,金牌服务电话,中文培训等。因此在帮助国内的企业快速上手,快速解决使用上的困难,占有极大的优势。

中文技术支持论坛 常见问题手册(中文) 学习视频 Demo 代码

表格类报表的支持程度

国内的系统中,大量存在表格类(Excel类、文档类)的数据报表开发,如统计汇总、检测报告、表单等。
能否很好的支持此类报表的设计和开发,往往是能否采用此控件的决定性因素

  • 水晶报表:提供交叉表控件,OLAP报表控件,可以创建于Excel 中类似的单维度和多维度数据透视表。但灵活性不强,只能创建单表头的数据透视表。无法修改或添加总计,汇总公式,或是自定义单元格合并。更无法支持中国复杂报表的表角斜线及无规则的单元格合并。

  • FastReports:提供矩阵(Matrix)控件,用来进行复杂报表的设计,可以实现单维度和多维度的数据透视表,可以进行自动合计和警示功能,但是它设计起来比较复杂,灵活性差。并且不支持单元格的自动合并,不能进行复杂表头的设计。

  • Stimulsoft:提供了表格控件和交叉表(Cross Tab)分别解决列表泪报表和数据透视表的需求。但是表格控件并不是严格意义的表格,没有表头表尾详细数据的概念,是用单元格拼起来的,所以无法控制每一行的显示。交叉表可以创建多维合计透视表,但是在合计表达式只能选择默认的Sum,而且无法创建复杂的表头。

  • ActiveReports:提供表格控件、矩表控件专为创建Word 类报表及Excel类表格报表以及各式复杂中国式报表。
    创建复杂报是ActiveReports 特长,使用已提供的表格和矩表,即可灵活的实现单元格合并,多为复杂表头报表。

图表类报表的支持程度

随着业务系统中对图表、Dashboard、大屏类应用需求的不断增强,图表的支持类型和外观也是考量报表控件的重要方面
图表类型(注: 红色标注是各品牌特有的)

  • 水晶报表支持图表类型包括:条形图、柱形图、折线图、面积图、饼图、散点图、气泡图、甘特图、量表图、漏斗图、三维图表、雷达图。

  • FastReport支持图表类型包括:条形图、柱形图、折线图、面积图、饼图、散点图、气泡图、甘特图、量表图、漏斗图、三维图表、雷达图。

  • Stimulsoft 报表支持图表类型:支持38 种类型,图表UI 采用扁平化设置,而且也为设计人员提供了多套的UI 主题选择,所以在美观程度上做的是最好的。

  • ActiveReports 报表支持图表类型:条形图,柱形图,折线图,面积图,饼图,散点图,气泡图,甘特图,漏斗图,三维图表,金融图,三维图表,多Y轴图表,复合图表,四象限图。

图表设计步骤

  • 水晶报表
    水晶报表必须为图表准备数据,数据准备完成后,才可以使用图表控件,对于运行时报表数据源的报表,创建图表就不会很方便。

  • FastReports

FastReports 在创建图表时,首先插入图表,然后绑定对应的数据源。

  • Stimulsoft Report

  • ActiveReports

ActiveReports 在创建图表时,只需要为报表提供可用的数据字段即可,因此在数据绑定中相对方便。

浏览器的兼容性

  • 水晶报表:支持 IE 10 及以上,Firefox ESR 52.0 及以上,Edge14.14及以上,Chrome 浏览器,不支持IE 10以下的浏览器。

  • FastReport:报表支持当前所有的浏览器 IE、谷歌、火狐、Safari 等

  • Stimulsoft:支持IE 、Firefox 、Chrome、Safari ,但要求在网页端浏览报表需要安装不同的插件,如Flash,ActiveX等。

  • ActiveReports: IE 9+、Firefox 20 +、Chrome 30 +、Safari 6.0+

部署后的修改

从事项目开发的同学,肯定对发布后的修改深恶痛绝,往往发布后的频繁修改会造成项目迟迟无法交付、改的越多Bug越多的情况,对于报表模块,类似发布后的修改更是家常便饭,如何在项目发布后快速的对应需求变更并保证质量,这是每个项目负责人必须要考虑的问题

  • 水晶报表:报表需求无论变化多么微小,都需要在修改后重新编译部署整个项目,所以在后期维护成本是非常大的,并且没有单独的设计器提供给最终用户新增报表。

  • FastReport:非开发客户无法自主进行报表的设计,当报表程序发布后客户如果想要进行简单的修改都是需要返回重新设计及编译。

  • Stimulsoft:是针对不同的平台,需要将设计好的报表文件根据要发布的平台去编译成对应的文件,所以发布后,如果有需要更改报表的需求,整个项目也需要重新发布维护,另外同一张报表文件,无法在不同平台无障碍使用。

  • ActiveReports:报表设计文件作为独立的XML格式的文件,同时也为开发人员提供最终用户设计器,可修改报表,修改完成后只需要替换旧文件,就可正常使用,不需要重新编译发布。

全部打分

如何选型

无论是哪一个报表控件,都有其最适合的场景,只有明确了项目中的明确需求,才能使控件真正节约开发成本,提高产品质量。以下是在选型时,需要考虑的几个方面:

浏览器兼容性

浏览器的兼容性,水晶报表是基于IE浏览器内核开发的,所以对IE浏览器有很好的兼容性,但是对于其他的主流报表如:谷歌、火狐、游猎等浏览器的兼容性就不是很好,在网页端展示的时候亲和度比较低,但是ActiveReports,FastReport,Stimulsoft在浏览器支持方面特别是IE、谷歌、火狐、游猎浏览器具有很好的兼容性,在网页端展示的有很好的亲和度不会出现误差。
浏览器兼容性
在网页端的展示,水晶报表需要安装一个ActiveX的插件,并且交互性差。Stimulsoft Reports需要在客户端安装Flash,ActiveX等插件才可以预览。ActiveReports和FastReport 在网页端不用安装任何插件,支持 HTML5,HTML Viewer,Flash Viewer,Raw HTML,Acrobat Reade等
支持移动端
如今越来越多的用户倾向移动办公,因此对移动端的需求也是大幅度增长,而水晶报表因为现在主要为SAP 辅助数据分析,所以对移动端报表支持几乎没有,FastReport 支持移动端报表展示。Stimulsoft基于HTML5技术实现移动端,但HTML5Viewer 功能会有所限制,比原生的 .NET 功能少了很多。ActiveReports 提供了基于HTML5技术HTML5Viewer 实现响应式报表功能,具有很好的交互性。
快速创建复杂报表
应用于中国市场中,需要根据国内的特征确适应市场需求,而中国式的复杂报表就是考验报表工具,是否满足市场的一大标准,无论是复杂运算的会计报表,还是复杂表头的汇总统计报表,还是自由度极高的单元格合并报表,每一种典型的报表都是中国报表设计人员的痛点,也是考验报表工具能否满足需求的重要标准。Stimulsoft, FastReport,均提供了 交叉表控件,但这种控件只能支持创建多维透视表,无法去灵活的去自定义或修改。如果要实现复杂的报表展示,必须依赖 TextBox 去拼凑实现。ActiveReports提供了一种独特的控件“矩表,只需要拖拽设计以及自动合并,即可实现中国复杂报表。
多数据源支持
信息系统经过多年积累或新系统的业务数据都是越来越庞杂的,为了安全可能同时存在于不同的数据库中,因此报表工具一定要同时支持多种主流数据库,要兼容新型的数据库源,而且要处理同时支持多数据源的应用场景,而水晶报表目前无法做到多数据源支持,Stimulsoft, FastReport,均不支持同一报表中绑定多个数据源并展示。ActiveReports 支持在同一张报表中绑定多个数据源,并在同一数据控件中展示。
技术服务与支持
无论选择哪种报表工具,开发人员都需要快速上手和使用,而且会随着系统的深入开发会有新的需求产生,所以能够随时快速获取技术支持,也是企业选择的一大重要因素,否则在遇到问题时,开发人员只能自己花费大量的时间和精力去寻找解决方案。相反,如果有专业的技术团队,可轻松有效的解决产品问题。4个产品中,只有ActiveReports 在国内有厂商级别的支持,FastReport和Stimulsoft在国内有代理商,但无法提供技术支持。
维护升级成本低
选择报表工具就是为了有效的减少开发成本,所以需要选择最合适的报表工具,而如果后期系统升级或迁移会带来大量的工作量时,则会带来重构的危险,如果报表工具能够有很好的向上及向下的兼容性,则大大减少了系统升级和迁移的成本。ActiveReports和水晶报表的报表文件是一种文件格式,方便服用及升级。

总结

如题目所讲,没有最好的,只有最适合的,每个项目都具备不同的特点,

  • 财务系统中,对表格类的报表的要求很高,
  • 管理决策系统,偏重于图表和大屏的展现
  • 生产系统,偏重数据类型的支持
  • 事业单位或政府们的内部系统,因存在低版本的IE浏览器,需要考虑浏览器支持的通用性
  • 数据分析部门,要考虑报表在最终用户处的频繁修改和定制
  • ……

最后,希望报表开发人员能够通过此篇文章对 .NET 报表控件的选型有所帮助。

本文作者:葡萄城《转载请申明》

只用最适合的!全面对比主流 .NET 报表控件的更多相关文章

  1. 只用最适合的! 全面对比主流 .NET 报表控件:水晶报表、FastReport、ActiveReports 和 Stimulsoft

    前言 随着 .NET 平台的出现,报表相关的开发控件随之出现,目前已经有若干成熟的产品可供开发人员使用,本文旨在通过从不同维度对比目前最流行的4款 .NET报表控件,给所有报表开发人员在做产品选型时一 ...

  2. IP Editor IP控件(对比一下封装IP控件)

    HWND hIpEdit; void __fastcall TForm2::FormCreate(TObject *Sender) { hIpEdit = CreateWindow(WC_IPADDR ...

  3. ParentWindow属性及其一系列函数的作用——适合于那些不需要父控件管理内存释放的子控件

    TWinControl = class(TControl) property ParentWindow: HWnd read FParentWindow write SetParentWindow; ...

  4. Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比

    Android自动化测试中AccessibilityService获取控件信息(2)-三种方式对比   上一篇文章: Android自动化测试中AccessibilityService获取控件信息(1 ...

  5. visual studio开发工具的C#主流控件属性一览表

    visual studio开发工具的C#主流控件属性一览表 详细的介绍了各控制属性的详细中文介绍 C#控件及常用设计整理 1.窗体 1.常用属性 (1)Name属性:用来获取或设置窗体的名称,在应用程 ...

  6. 两款工控控件对比评测:Iocomp和ProEssentials

    对于程序员来说,要凭一己之力开发出漂亮逼真的工控仪表和工控图表是非常耗时间和精力的,那么使用专业的第三方控件就是不错的选择,不仅节约开发时间,降低了项目风险,最重要的是第三方控件写的程序更专业,工控图 ...

  7. 灵活轻便的Table控件,适合复杂样式的内容排版

    github仓库地址 https://github.com/gaoyangclub/GYTableViewController 前言 TableView是在项目开发的时候经常用到的组件,几乎百分之八十 ...

  8. Caffe、TensorFlow、MXnet三个开源库对比+主流分类模型对比

    库名称 开发语言 支持接口 安装难度(ubuntu) 文档风格 示例 支持模型 上手难易 Caffe c++/cuda c++/python/matlab *** * *** CNN ** MXNet ...

  9. js 时间转成时间戳对比;My97DatePicker日历控件时间格式;Date.parse Firefox火狐浏览器返回Nan的解决办法

    有个情况,我在显示时间的时候是需要显示为  2013年8月15日 14时28分15秒 但是假如我用js去获取到这个时间,并且想进行时间对比的时候,这个时间2013年8月15日 14时28分15秒根本就 ...

随机推荐

  1. 19.QT-事件发送函数sendEvent()、postEvent()

    Qt发送事件分为两种 -阻塞型事件发送 需要重写接收对象的event()事件处理函数 当事件发送后,将会立即进入event()事件处理函数进行事件处理 通过sendEvent()静态函数实现阻塞发送: ...

  2. Windows 安装 Vue

    引言 在公司 linux 环境下安装不顺利,回家在 windows 下操作感觉到一种幸福 nginx 先安装了 nginx,其实跟 vue 没关系,只是打算用它做 web 服务,此处略过 nginx ...

  3. JavaScript 中常见设计模式整理

    开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式.本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知. JavaScript 中常见设计模 ...

  4. 微信H5中静默登录及非静默登录的正确使用姿势

    在微信中打开网页且需要调用微信登录接口时,微信官方给我们提供了两种登录调用方式:静默登录和非静默登录:但是官方文档中却没有说明在何种情况下使用静默登录,何种情况下使用非静默登录,所以在这里,我想将之前 ...

  5. jmeter利用自身代理录制电脑脚本(一)

    在利用代理录制脚本时一定要安装java jdk,不然不能录制的. 没有安装过java jdk安装jmeter后打开时会提示安装jdk,但是mac系统中直接打开提示安装jdk页面后下载的java并不是j ...

  6. RabbitMQ (二)工作队列

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37620057 本系列教程主要来自于官网入门教程的翻译,然后自己进行了部分的修改与 ...

  7. Reading Code Is Hard

    注: 以下内容引自: https://blogs.msdn.microsoft.com/ericlippert/2004/06/14/reading-code-is-hard/ Reading Cod ...

  8. acl.go

    package acl   import ( "github.com/armon/go-radix" )   var ( // allowAll is a singleton po ...

  9. BZOJ_3144_[Hnoi2013]切糕_最小割

    BZOJ_3144_[Hnoi2013]切糕_最小割 Description Input 第一行是三个正整数P,Q,R,表示切糕的长P. 宽Q.高R.第二行有一个非负整数D,表示光滑性要求.接下来是R ...

  10. appium----【已解决】【Mac】环境配置提示“Xcode Command Line Tools are NOT installed!"

    报错问题提示截图如下: 报错原因 :根据给出的信息很明显可以看到是"Xcode Command Line Tools"此工具没有安装 解决措施: 打开终端直接执行:xcode-se ...