用jenkins编译WPF程序并传输到服务器
环境准备:
1.ide visual studio2017 Enterprise,Ide可以https://visualstudio.microsoft.com/zh-hans/downloads/下载
注意
A.如果使用了不通版本的vs,请在后续的构建脚本中作出相应更改
B.在安装时,请确保选择了.NET桌面开发

2.jenkins,请从https://jenkins.io/download/ 进行下载

3.winrar 安装在C:\Program Files\WinRAR
4.其他应该了解的
A.请在jenkins安装在windows主机上,linux上是不能构建的.因为经典的.net framework不能运行在linux上
B.本示例是将工程的输出目录放在了解决方案src目录下,分别取名为Debug和Release
jenkins的必要配置
1.git的安装,百度下一步就ok
2.Publish Over FTP,用于将生成的安装包和更新包放置到ftp服务器
3.为什么不用msbuild插件编译,因为msbuild无法编译vdproj
另外你如果用.netframework4 下的msbuild编译,你可能会收到nameof无法解析之内的错误...
创建jenkins工程
1.新建任务,输入工程名称,选择 构建一个自由风格的软件项目 模板来添加一个构建任务
2.git 配置,这个按照代码仓库的地址和认证模式配置即可.如果没有安装git,这里会提示找不到git.exe

3.为了避免出现各种操蛋的问题,建议在每次构建前清空工作空间

4.添加一个执行windows批处理条目,用于执行nuget还原
请确保在你的解决方案根目录有nuget.exe(可从网上下载,然后放到对应位置即可)
如果你的项目中有自定义的nuget包,请添加一个nuget.config,并配置号对应的源
最终的项目目录应该是类似这样的:

nuget.config的配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="www.007008.fun" value="http://www.007008.fun:7789/nuget/Default/" />
</packageSources>
</configuration>
最后输入下面的批处理命令,你的项目就可以在编译时还原nuget包了
nuget.exe locals global-packages -clear
nuget.exe restore
5.以下是整个构建脚本
这里使用rar压缩了输出路径下的目录下的文件作为更新包
使用Advanced Installer 命令行进行了安装包的自动构建
echo "正在还原程序包..."
nuget.exe locals global-packages -clear
nuget.exe restore echo "正在设置环境变量..."
set devnev=C:\Program Files (x86)\Microsoft Visual Studio\\Preview\Common7\IDE\devenv.com
set advinst=C:\Program Files (x86)\Caphyon\Advanced Installer 14.9\bin\x86\advinst.exe
set SolutionName=lamic-pc-v4.sln
set ConfigurationPlatform=Release^|x86
set Configuration=Release
set rar=%ProgramW6432%\WinRAR\winrar.exe
set OutputPath=%WORKSPACE%\src\%Configuration%\
set UpdatePackagePath=%WORKSPACE%\update_packages\update.zip
set Setup=%WORKSPACE%\src\Setup\Setup.aip echo "开始使用devenv.com编译程序..."
"%devnev%" "C:\Program Files (x86)\Jenkins\workspace\%JOB_NAME%\%SolutionName%" /ReBuild "%ConfigurationPlatform%" echo "正在写入BUILD_NUMBER..." echo %BUILD_NUMBER%>>"%WORKSPACE%\src\%Configuration%\version" echo "开始删除无用的目录和文件..."
del "%WORKSPACE%\src\%Configuration%\*.pdb" echo "开始创建更新包..."
"%rar%" a -ep1 -r "%UpdatePackagePath%" "%OutputPath%" echo "开始构建安装包"
"%advinst%" /rebuild "%Setup%"
7.添加一个构建后的操作,用于将更新包和安装包传输到FTP上


用jenkins编译WPF程序并传输到服务器的更多相关文章
- WPF 程序的编译过程
原文:WPF 程序的编译过程 基于 Sdk 的项目进行编译的时候,会使用 Sdk 中附带的 props 文件和 targets 文件对项目进行编译.Microsoft.NET.Sdk.WindowsD ...
- 流程自动化RPA,Power Automate Desktop系列 - 创建WPF程序安装包及升级包
一.背景 之前写过的几个WPF小工具,每次发布都需要给它打安装包和升级包,涉及到一些系列繁琐的手工操作,有了Power Automate Desktop,于是便寻思着能不能做成一个自动化的流来使用. ...
- 在WPF程序中打开网页:使用代理服务器并可进行JS交互
本项目环境:使用VS2010(C#)编写的WPF程序,通过CefSharp在程序的窗体中打开网页.需要能够实现网页后台JS代码中调用的方法,从网页接收数据,并能返回数据给网页.运行程序的电脑不允许上网 ...
- WPF程序将DLL嵌入到EXE的两种方法
WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...
- 在VS中手工创建一个最简单的WPF程序
如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件——新建——项目——空项目,创建一个空项目. 第二步:添加引用,Presen ...
- 将传统 WPF 程序迁移到 DotNetCore 3.0
介绍 由于历史原因,基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序,如果将这些程序全部基于 DotNetCore 3.0 重写一遍 ...
- WPF程序中App.Config文件的读与写
WPF程序中的App.Config文件是我们应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,所以它是一种高效的程序配置方式,那么今天我就 ...
- Android 应用获取Jenkins编译的版本号
Android很多应用的版本号最后都带了编译的版本号.比如说V1.0.0.125,后边的125就通常使用每次编译之后build history的号码,它是逐次增加,这样就可以区分每个细分的编译版本号, ...
- 命令行编译 WPF
在开发调试代码 WPF 时,经常需要在修改完成代码后,点击 Rebuild,然后到指定文件夹下点击打开对应的 .exe 验证程序是否正确, 可以通过以下命名实现修改程序后,点击一个 .bat 文件,直 ...
随机推荐
- WordCountPro
github项目地址:https://github.com/Hoyifei/SQ-T-Homework-WordCount-Advanced PSP表格 PSP2.1 PSP阶段 预估耗时 (分钟 ...
- Appium移动端自动化测试之应用操作详解(四)
应用操作篇 1.1).安装应用 desired_caps = { 'platformName': 'Android', 'platformVersion': '5.0.0.0', 'deviceNam ...
- oracle数据库查询全系整理
oracle数据库方面的知识到今天已经整理了12篇.当然,这不是终点,这只是一个开始,希望我写的文章可以帮助更多初学数据库的童鞋快速上手,如果你觉得文章对你有帮助,那么恭喜你已经入门了,数据库里面的知 ...
- Python基础入门-实现猜数字小游戏
今天呢,我们来通过前面学过的一些知识点来完成一个猜数字大小的游戏程序设计.那么呢,一般人写代码直接上来就干,没有分析,这样的做法是没有产出的,除非你是大牛,今天呢,我会把我学习编程的思路分享给大家,我 ...
- oracle数据库基本操作
我们主要学习数据库的一些基本操作,比如如何在数据库创建用户,授权,删除用户,回收权限,为用户加锁或者解锁等一些常用的操作. 首先,我们要知道数据库中创建用户的语句怎么写,看下面: 1.创建用户 cre ...
- 设计模式11: Flyweight 享元模式(结构型模式)
Flyweight 享元模式(结构型模式) 面向对象的代价 面向对象很好的解决了系统抽象性的问题,同时在大多数情况下也不会损及系统的性能.但是,在某些特殊应用中,由于对象的数量太大,采用面向对象会给系 ...
- POJ2442 Sequence(堆的骚操作)
Description Given m sequences, each contains n non-negative integer. Now we may select one number fr ...
- 关于CS0016: Could not write to output file ‘c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Temporary AS
1.添加用户"Network Service” 和 “IIS_IUSERS” 读下面目录的读写权限 a) C:\Windows\Temp b) C:\Windows\Microsoft.NE ...
- 警惕C#事件使用过程中的GC陷阱
关于C#中的事件,园里已经有大量的文章对其内在实现做过剖析,如果还不甚了解的可以阅读这篇文章 通过Demo来细看C#事件的内在机制 虽然比较早,但非常清楚地展示了事件的内部机制,总结一下就是 1.事件 ...
- C#构造函数详解和析构函数详解
首先来了解下构造函数的定义: C#构造函数是一种特殊的成员函数,它的作用主要用于为对象分配存储空间,对数据成员进行初始化. 接下来看一下他的语法定义形式: |访问修饰符| 标识符 (|参数列表|) | ...