中型WPF客户端开发项目总结(3.1) - 简述项目结构

项目的背景、需求收集、设计等涉及商业隐私,所以这些内容不是本栏目的重点。

主结构

由于主要是我一个人开发,而且目前也不涉及数据库操作,所以没有经典三层或是其它高大上的结构。

global文件夹中存放的是一些跟.sln文件同级的文件,包括.gitignore、Directory.Build.props、 发布脚本、清理脚本等文件。

Directory.Build.props

介绍:https://docs.microsoft.com/en-us/visualstudio/msbuild/customize-your-build

Prior to MSBuild version 15, if you wanted to provide a new, custom property to projects in your solution, you had to manually add a reference to that property to every project file in the solution. Or, you had to define the property in a .props file and then explicitly import the .props file in every project in the solution, among other things.

However, now you can add a new property to every project in one step by defining it in a single file called Directory.Build.props in the root folder that contains your source. When MSBuild runs, Microsoft.Common.props searches your directory structure for the Directory.Build.props file (and Microsoft.Common.targets looks for Directory.Build.targets). If it finds one, it imports the property. Directory.Build.props is a user-defined file that provides customizations to projects under a directory.

大致意思是为目录下的所有项目提供一致的项目配置。

比如 ,我这个解决方案中就是用这个文件来统一我所有Project的输出版本号。

 1 <Project>
 2   <PropertyGroup>
 3     <LangVersion>latest</LangVersion>
 4     <Description>*******</Description>
 5     <Version>1.0.0.0</Version>
 6     <Company>****</Company>
 7     <Copyright>Copyright © **** 2019</Copyright>
 8
 9     <Configurations>Debug;Release;Business_User;AI_User;IDUU_User</Configurations>
10   </PropertyGroup>
11
12   <!--Debug:客户端开发者-->
13   <PropertyGroup Condition="‘$(Configuration)‘==‘Debug‘">
14     <DefineConstants>TRACE;DEBUG</DefineConstants>
15     <DebugType>full</DebugType>
16     <DebugSymbols>true</DebugSymbols>
17   </PropertyGroup>
18
19   <!--Release:客户端开发者、后端维护人员-->
20   <PropertyGroup Condition="‘$(Configuration)‘==‘Release‘">
21     <Optimize>true</Optimize>
22     <DefineConstants>TRACE;RELEASE</DefineConstants>
23   </PropertyGroup>
24
25   <!--Business_User:业务配置人员-->
26   <PropertyGroup Condition="‘$(Configuration)‘==‘Business_User‘">
27     <Optimize>true</Optimize>
28     <DefineConstants>TRACE;USER;Business_USER</DefineConstants>
29   </PropertyGroup>
30
31   <!--AI_User:通用用户-->
32   <PropertyGroup Condition="‘$(Configuration)‘==‘AI_User‘">
33     <Optimize>true</Optimize>
34     <DefineConstants>TRACE;USER;AI_USER</DefineConstants>
35   </PropertyGroup>
36
37   <!--IDUU_User:高级用户-->
38   <PropertyGroup Condition="‘$(Configuration)‘==‘IDUU_User‘">
39     <Optimize>true</Optimize>
40     <DefineConstants>TRACE;USER;IDUU_USER</DefineConstants>
41   </PropertyGroup>
42 </Project>

可以看出,在上面的文件中,我定义了很多项目配置项,如:Debug;Release;Business_User;AI_User

它们的作用是方便我在publish时可以根据不同的使用者生成不同的客户端。

Publish.ps1

 1 #准备工作
 2 #更新包管理平台
 3 #Install-PackageProvider -Name NuGet -Force
 4 #Install-Module -Name PowerShellGet -Force
 5 #或
 6 #Update-Module -Name PowerShellGet
10
11 #请在src目录执行此脚本
12
13 $publish_home=[System.IO.Path]::Combine((Get-Location).Path,"Publish\")
14 #$7z="D:\Program Files\7-Zip\7z.exe"
15 $7z="C:\Program Files\7-Zip\7z.exe"
16 $version=([xml](Get-Content Directory.Build.props -encoding utf8)).Project.PropertyGroup[0].Version
17
18 Function Build([string]$configuration,[string]$zipFileHead,[string]$ext=".7z")
19 {
20     $dir=[System.String]::Format("{0}_{1}",$zipFileHead,$version)
21     $full_path=$publish_home+$dir
22     $csproj=‘.\SpiderX\SpiderX.csproj‘
23
24     Write-Host ([System.String]::Format("构建 {0} 版本中...",$configuration))
25     dotnet build -c $configuration $csproj
26     Write-Host ([System.String]::Format("发布 {0} 版本中...",$configuration))
27     dotnet publish --configuration $configuration --framework net472 --runtime  win7-x86 --output $full_path $csproj
28
29     $file_full_path=$full_path+$ext
30
31     Write-Host "打包文件中..."
32     &$7z a $file_full_path $full_path
33 }
34
35 Function BuildActivator([string]$configuration,[string]$zipFileHead,[string]$ext=".7z")
36 {
37     $dir=[System.String]::Format("{0}_{1}",$zipFileHead,$version)
38     $full_path=$publish_home+$dir
39     $csproj=‘.\SpiderX.AdvActivator\SpiderX.AdvActivator.csproj‘
40
41     Write-Host ([System.String]::Format("构建 {0} 版本中...",$configuration))
42     dotnet build -c $configuration $csproj
43     Write-Host ([System.String]::Format("发布 {0} 版本中...",$configuration))
44     dotnet publish -c $configuration --self-contained false --output $full_path $csproj
45
46     $file_full_path=$full_path+$ext
47
48     Write-Host "打包文件中..."
49     &$7z a $file_full_path $full_path
50 }
51
52 #--------------清空文件夹-----------------#
53 if(Test-Path $publish_home)
54 {
55     Write-Host "清空`发布`文件夹"
56     Get-ChildItem $publish_home | Remove-Item -Recurse
57 }
58
59 #--------------AI/BI-----------------#
60 Build "AI_User" "****"
61
62 #--------------打开`发布`文件夹-----------------#
63 explorer.exe ("/root,"+$publish_home)
64
65 #--------------IDUU-----------------#
66 Build "IDUU_User" "****_IDUU" ".zip"
67
68 #--------------高级-----------------#
69 Build "Release" "****_DEV"
70
71 #--------------业务SQL-----------------#
72 Build "Business_User" "****_SQL"
73
74 #--------------激活码签发工具-----------------#
75 BuildActivator "Release" "****_Activator"
76
77 Write-Host "发布成功!"

powershell是个好东西。由于需要部署的用户群体较多,暴露的客户端标识也较多,如果手动发布,费事费力。如果编译期间发生错误,还需要重新来一遍,所以我利用ps脚本写了一个多版本发布工具,可以一键生成所有可用部署客户端(带版本号、带部署标识),十分方便。

Clean.ps1

这也是一个powershell脚本,主要用来做一些清理工作。

TODO

这个文件主要记录一些比较重要的TODO项。

可能有人会问,VS不是提供了TODO标记么,为什么还要专门自建一个markdown文档:

1. 代码中的TODO可能只是简单的未实现功能,做个标记,有机会来补充。这个我平时也用,但是有些功能是一个比较大的规划,涉及多个模块,非代码层面,顺手记在统一的文件中。在某个时间点,可以根据功能的优先级,来重新安排任务,这个非简单的`//TODO`能做到的;

2. JIRA呢,可以记录一些组织安排的比较重要的任务或bug,但是对自觉性比较高的某人来说,可能还需要另外一处地方来记录问题。

原文地址:https://www.cnblogs.com/godlessspirit/p/12687102.html

时间: 2024-07-29 10:11:43

中型WPF客户端开发项目总结(3.1) - 简述项目结构的相关文章

中型WPF客户端开发项目总结 - 概述

背景 最近一年多时间的主要工作是在开发一款客户端配置工具,为项目的系统提供基础配置功能. 后端是Java,提供系统核心功能,并向客户端提供配置接口:客户端使用的是WPF,提供与用户的交互和调用配置接口,保证模型数据准确性. 为什么使用客户端技术,而非前端WEB 虽说要做的是一个配置工具,但是根据需求,该工具要提供大量复杂的用户交互(弹窗.监控.报警等).计算.本地日志等功能. 1. 大量的数据计算很难在前端上实现 ,就算实现,也需要后端提供更多的接口辅助: 2. 复杂交互大大增加现有前端技术复杂

中型WPF客户端开发项目总结(3.2) - 公共基础 `XXXX.Common`项目

3.1中提到我定义了一些公共配置项,现在我来说一说配置项的用法: 1. 提供软件标识符 1 public static class CfgIndentifiers 2 { 3 public static readonly string Identifier = 4 #if DEBUG 5 "DEBUG" 6 #elif AI_USER 7 string.Empty 8 #elif IDUU_USER 9 "IDUU" 10 #elif Business_USER 1

自适应界面开发总结——WPF客户端开发

1.由于界面大小是变化的,所以必须有一个稳定不变的参考界面(即在一个标准的界面尺寸下进行WPF界面开发,比如:发票查验V3.0的美工设计尺寸——1024*740):   PS:在WPF的用户控件Xaml代码中,可看到这样的“具有固定宽.高”.用于界面布局的代码:DesignHeight="300" d:DesignWidth="300",这两个宽.高值就可以使用美工的设计尺寸 2.使用Grid控件,按照比例(*)进行布局设计,再配以Margin值进行外边距控制即可(

WPF学习开发客户端软件-任务助手(下)

时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码)  已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主,采用MVVM模式(有小部分没有修改过来),小巧.使用方便. 具体功能与更新如下: 计划助手:本软件由[email protected]开发与维护,免费使用,如有好的意见或建议,可发送邮件到[email protected],谢谢使用!注(功能与特色):1.本软件使用方便.操作简便:2.本软件可设置

wpf 客户端【JDAgent桌面助手】开发详解(三) 瀑布流效果实现与UI虚拟化优化大数据显示

目录区域: 业余开发的wpf 客户端终于完工了..晒晒截图 wpf 客户端[JDAgent桌面助手]开发详解-开篇 wpf 客户端[JDAgent桌面助手]详解(一)主窗口 圆形菜单... wpf 客户端[JDAgent桌面助手]开发详解(二)桌面宠物制作详解 因为前段时候有很多的事情 比较忙,自从上次写完博客之后很久没有更新了. 用WPF制作的京东桌面助手.这个作品是参加比赛的,自己花费了很多心思和时间在里面,最终的作品效果和比赛的结果还是令人满意的. 作品感觉不说很fashion,也足够细致

WPF学习开发客户端软件-任务助手

本人纯属WPF新手,布局和WPF的开发水平相当欠缺,从个人来说,还是比较喜欢WPF的,有人说WPF是界面加上WINFORM,我不这样认为,WPF与WINFORM主要的不同在于数据绑定. 这个软件虽然功能比较简单,没有做分层设计,也没有使用MVVM的开发模式,但也确实花了我不少的时间,算是这段时间学习WPF的结果吧,在此给大家展示一下,也给同行的新手门一个参考的例子(喜欢不会是误导). 软件具体功能如下: 1.本软件可以设置计划任务运行的周期:一次.每月.每天.每小时.间隔分钟等不种不同的运行模式

上门洗车APP --- Android客户端开发 之 项目结构介绍

上门洗车APP --- Android客户端开发 之 项目结构介绍 前言 虽然公司项目较紧,但还是抽出时间给大家继续更新.     o_O"~ 感谢大家的关注,很高兴和大家共同学习.前面给大家分享了项目中的以下内容: 上门洗车APP --- Android客户端开发 前言及业务简介 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(一) 上门洗车APP --- Android客户端开发 之 网络框架封装介绍(二) 之前有很多朋友私信过来说想打包一份源码学习,由于本项目也是还

WPF PRISM开发入门一

这篇博客将介绍在WPF项目中引入PRISM框架进行开发的一些基础知识.目前最新的PRISM的版本是Prism 6.1.0,可以在Github上获取PRISM的源码.这个系列的博客将选择PRISM 4.1版本来讲解.可以从微软官网上下载到PRISM 4.1相关内容.将下载下来的文件解压开: 新建一个WPF解决方案如下: 解决方案中包含两个工程,GetStartedPrismWPF是一个WPF项目,GetStartedPrismWPF.MainModule是一个类库项目.这两个项目中都同时添加下面P

Unity3D技术之本地客户端开发入门

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多U3D资源.U3D培训视频.U3D教程.U3D常见问题.U3D项目源码,我们致力于打造业内unity3d培训.学习第一品牌. 本地客户端开发入门 本地客户端 (NaCl) 是 Google 提供的新技术,其允许您在 Web 页面嵌入本地可执行代码,以便您在无需安装插件的情况下部署性能非常强的 web 应用程序.目前,NaCl 仅支持在 Windows.Mac OS X 和 Linux(含可用的 Chrome 操作系统支