准备工作

.NET Framework >= 4.6 Visual Studio >= 2015 DevExpress >= 19.1.3

安装DevExpress控件

客户端项目基于DevExpress控件进行开发,所以在搭建之前先安装DevExpress控件,具体安装步骤如下:

  1. 打开公司共享文件夹:\\192.168.1.199\lyy\西安交通信息业务软件开发框架\DevExpress-19.1.3
  2. 打开安装文件:DevExpressNETComponents-19.1.3.exe进行安装,选择组件时,只需要选择第一项即可,其他组件并不需要,按照提示完成安装即可。image.png
  3. 目前下面的zh-Hans.rar文件是组件汉化文件,客户端发布时需要把此文件解压后的文件夹复制到发布目录,以支持组件的汉化。
  4. 破解DevExpress组件。解压文件DevExpressPatch 8.0 for Visual Studio 2019.rar,以管理员方式运行DevExpress.Patch.8.exe,点击按钮Apply patch,等待执行完成即可破解。

NuGet私服

项目中引用了公司自定义类库,此类库目前发布在公司内部的NuGet私服,所以在创建项目之前在Visual Studio中对NuGet私服进行配置,具体配置步骤如下:

  1. 打开Visual Studio中的菜单工具选项NuGet包管理器程序包源
  2. 右上角绿色的加号,在下面输入名称:192.168.1.226.nuget,源地址:http://192.168.1.226:9998/nuget,点击确定完成配置。

image.png

开发前的注意事项

由于WinForm的界面缩放机制的原因,需要在开发之前注意一下几点:

  1. 由于WinForm的界面缩放机制跟操作系统的设置有密切的关系,所以在进行WinForm开发时,Visual Studio必须是100%缩放模式,否则在Visual Studio中设计的WinForm界面在其他非缩放的操作系统中会变形。为了解决这个问题有两种方案。
    • 关闭操作系统的缩放行为,使用100%显示模式。由于操作系统的缩放关闭,所以Visual Studio也将以100%模式显示。
    • 不关闭操作系统的缩放行为,导入\\192.168.1.199\lyy\西安交通信息业务软件开发框架\Visual Studio DPI目录下面的文件 DevEnv Not DPI Aware.reg,作用是使Visual Studio不缩放,以100%的模式显示。缺点是整个Visual Studio会变模糊。另一个文件DevEnv DPI Aware.reg标识恢复Visual Studio缩放。导入时请注意:必须要把此注册表文件复制到本机再导入,否则可能导入失败
  2. 新建Form后,在拖拽界面之前先修改父类,使其继承类FrmBase,或者继承了此类的自定义类,修改完成后再对界面进行拖拽,如果不按照此步骤操作的话,设计时界面可能与运行时界面不一致。
  3. 新建UserControl后,在拖拽界面之前先修改父类,使其继承类BaseXtraUserControl
  4. 项目中不用使用系统原生控件。

新建项目

1. 新建项目向导

打开Visual Studio,点击新建项目向导,选择Windows 窗体应用,点击下一步。

image.png

输入项目名称、位置,设置框架版本为.NET Framework 4.6,点击创建完成。

image.png

完成后,删除系统自动创建的Form1.cs。

2. 修改app.config文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <configuration>
  3. <runtime>
  4. <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  5. <probing privatePath="devexpress;lib"/>
  6. </assemblyBinding>
  7. </runtime>
  8. <startup>
  9. <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
  10. </startup>
  11. </configuration>

3. 新建app.json文件

添加新的配置文件app.json,右键设置app.json文件的属性复制到输出目录如果较新则复制

快速开始 - 图5
修改app.json文件内容:

  1. {
  2. "WinForm": {
  3. //应用程序标识
  4. "Id": "1117664844619845632",
  5. //服务器地址
  6. "ApiUrl": "http://192.168.1.227:6070",
  7. //服务器连接超时,单位毫秒
  8. "ApiTimeout": 10000,
  9. //系统标题
  10. "Title": "西交投业务管理系统",
  11. //开发商名称
  12. "CompanyName": "西安交通信息投资营运有限公司",
  13. //版权信息
  14. "Copyright": "西安交通信息 版权所有",
  15. //软件版本
  16. "Version": "1.0",
  17. //软件网站或者公司网站
  18. "WebSite": "http://www.xci96716.com",
  19. //售后服务电话
  20. "Telephone": "029-88233366",
  21. //调试模式
  22. "IsDebugMode": true,
  23. //是否只允许运行一个实例
  24. "IsSingleton": true,
  25. //是否启用系统更新
  26. "EnableUpdate": false,
  27. //是否同步日期
  28. "EnableSyncDate": false,
  29. //是否允许自动锁定主界面
  30. "AllowAutoLockMain": false,
  31. //在指定分钟之内无任何操作,主界面将自动锁定,AllowAutoLockMain参数启用时生效
  32. "AutoLockInterval": 2,
  33. //在任务栏通知区域显示图标
  34. "ShowNotification": false,
  35. //关闭主窗口时程序行为:true退出;false隐藏
  36. "CloseMainIsExit": true,
  37. //主页面是否显示标题
  38. "MainPageShowCaption": false,
  39. //菜单是否使用大图标
  40. "NavMenuLargeIcons": true,
  41. //主页面工具栏图标是否使用大图标
  42. "MainPageToolbarLargeIcons": false,
  43. //分页控件每页显示数量
  44. "PageSize": 20,
  45. //分页控件每页显示数量快捷选择,多个之间用半角英文逗号隔开
  46. "PageSizeList": "10,20,50,100,200",
  47. //是否允许用户配置表格
  48. "AllowGridSetting": true,
  49. //表格配置存储模式:true本地模式;false服务器模式
  50. "GridSettingLocalMode": false
  51. }
  52. }

4. 添加XCI.Sys引用

从私服中添加自定义类库,点击项目下的引用管理NuGet程序包,打开后右上角程序包源选择192.168.1.226.nuget,左上角点击浏览显示出私服上目前发布的程序包。

  • Oracle.ManagedDataAccess 程序包是C#连接Oracle数据库的驱动,该类库本身并不需要引用到项目中,只需要在程序发布时拷贝到exe所在目录即可。
  • XCI.Sys 程序包是框架核心类库,必须引用,点击此程序包,点击右侧的安装按钮。

图片6.1
快速开始 - 图6

图片6.2

image.png

图片6.3

快速开始 - 图8

5. 新建目录结构

在项目中新建以下文件夹,用来将不同的代码放到不同的位置,具体含义如下:

  • Controls 存放系统全局自定义控件
  • UserControls 存放系统业务相关的用户控件
  • Core 存放系统基础代码
  • Forms 存放界面表单类,此目录下面可以按照业务模块建子文件夹
  • Filter 存放业务过滤模型
  • Model 存放业务模型类
  • Service 存放业务服务类

6. 新建Application.cs

新建应用程序启动类:应用名称Application.cs,内容如下:

  1. /// <summary>
  2. /// 应用程序类
  3. /// </summary>
  4. public class WindowsFormsAppApplication : XCI.Sys.BaseApplication
  5. {
  6. }

7. 修改Program.cs启动类

  1. static class Program
  2. {
  3. /// <summary>
  4. /// 应用程序的主入口点。
  5. /// </summary>
  6. [STAThread]
  7. static void Main(string[] args)
  8. {
  9. Application.EnableVisualStyles();
  10. Application.SetCompatibleTextRenderingDefault(false);
  11. XCI.Sys.Helper.AppHelper.Run<WindowsFormsAppApplication>(args);
  12. }
  13. }

其中WindowsFormsAppApplication指的是用户自定义的应用程序对象。此对象实现IApp接口,针对IApp对象的具体介绍,请参考应用程序类章节。

8. 自定义exe文件图标

  • 找一个有效的.ico图片,复制到项目根目录,修改图标名称为app.ico
  • 在项目根目录上点击右键→属性→应用程序→资源→图标和清单,在图标处选择app.ico,设置完成后重新生成项目。

快速开始 - 图9

9. 防止DevExpress提示试用期

Properties目录下新建文件licenses.licx,设置此文件的生成操作,防止DevExpress组件有试用期的提示。

image.png

10. 内置工具

在解决方案目录上点右键 → 在文件资源管理器中打开文件夹,进入目录packages\XCI.Sys.1.0.2\config,目录下面有以下文件,根据自身需求把相关文件复制到exe输出目录即可使用,复制时把exe对应的config文件也一起复制。

  • configure.exeapp.json配置文件进行可视化配置
  • designer.exe 报表设计器
  • startup.exe 系统默认的启动器

11. DevExpress组件汉化

从DevExpress组件安装包目录中拷贝文件zh-Hans.rar,解压到exe输出目录,完成DevExpress组件汉化。

12. 移除输出目录DevExpress相关dll

默认情况下,系统编译完成后,项目输出目录下面会包含大量的DevExpress组件相关的DLL,由于开发机器都已经安装了DevExpress组件,所以输出目录不需要这些文件。解决方法,项目目录点右键→打开属性页→生成事件→生成后事件命令行 输入下面的命令行:

  1. del DevExpress.*.dll DevExpress.*.xml Newtonsoft.Json.xml
  2. rd /s/q de es ja ru

重新生成项目。

恭喜,此时应用程序已配置完成,后续根据业务情况,把相应的应用程序添加到对应的位置,编译后启动应用程序开始调试吧!
**

客户端调试工具

采用Fiddler作为客户端调试工具,下载地址:https://www.telerik.com/fiddler,属于免费软件。