环境准备:

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程序并传输到服务器的更多相关文章

  1. WPF 程序的编译过程

    原文:WPF 程序的编译过程 基于 Sdk 的项目进行编译的时候,会使用 Sdk 中附带的 props 文件和 targets 文件对项目进行编译.Microsoft.NET.Sdk.WindowsD ...

  2. 流程自动化RPA,Power Automate Desktop系列 - 创建WPF程序安装包及升级包

    一.背景 之前写过的几个WPF小工具,每次发布都需要给它打安装包和升级包,涉及到一些系列繁琐的手工操作,有了Power Automate Desktop,于是便寻思着能不能做成一个自动化的流来使用. ...

  3. 在WPF程序中打开网页:使用代理服务器并可进行JS交互

    本项目环境:使用VS2010(C#)编写的WPF程序,通过CefSharp在程序的窗体中打开网页.需要能够实现网页后台JS代码中调用的方法,从网页接收数据,并能返回数据给网页.运行程序的电脑不允许上网 ...

  4. WPF程序将DLL嵌入到EXE的两种方法

    WPF程序将DLL嵌入到EXE的两种方法 这一篇可以看作是<Visual Studio 版本转换工具WPF版开源了>的续,关于<Visual Studio 版本转换工具WPF版开源了 ...

  5. 在VS中手工创建一个最简单的WPF程序

    如果不用VS的WPF项目模板,如何手工创建一个WPF程序呢?我们来模仿WPF模板,创建一个最简单的WPF程序. 第一步:文件——新建——项目——空项目,创建一个空项目. 第二步:添加引用,Presen ...

  6. 将传统 WPF 程序迁移到 DotNetCore 3.0

    介绍 由于历史原因,基于 Windows 平台存在着大量的基于 .NetFramework 开发的 WPF 和 WinForm 相关程序,如果将这些程序全部基于 DotNetCore 3.0 重写一遍 ...

  7. WPF程序中App.Config文件的读与写

    WPF程序中的App.Config文件是我们应用程序中经常使用的一种配置文件,System.Configuration.dll文件中提供了大量的读写的配置,所以它是一种高效的程序配置方式,那么今天我就 ...

  8. Android 应用获取Jenkins编译的版本号

    Android很多应用的版本号最后都带了编译的版本号.比如说V1.0.0.125,后边的125就通常使用每次编译之后build history的号码,它是逐次增加,这样就可以区分每个细分的编译版本号, ...

  9. 命令行编译 WPF

    在开发调试代码 WPF 时,经常需要在修改完成代码后,点击 Rebuild,然后到指定文件夹下点击打开对应的 .exe 验证程序是否正确, 可以通过以下命名实现修改程序后,点击一个 .bat 文件,直 ...

随机推荐

  1. Eclipse工具

    1 ArrayList的常见方法 * a: add(参数) 向集合中添加元素 * b: get(int index) 取出集合中的元素,get方法的参数,写入索引 * c: size() 返回集合的长 ...

  2. su 和sudo su 的区别

    su "user" 执行该命令,需要输入password,它是"user"中定义的用户的password,即,要变换成的用户的password.(如果已经用ro ...

  3. 使用IneliJ IDEA 2016将Java Web项目导出为War包

    本文记录使用IDEA导出war包的过程以及碰到问题的解决办法 虽说现在改用IDEA进行开发了,但还是用eclipse打war包 -.囧 这样下去不是办法... 于是今天就试着使用IDEA进行打包. 项 ...

  4. leetcode N-Queens I && N-Queens II

    第一个的代码: #include<iostream> #include<vector> using namespace std; bool isLegal(int i, int ...

  5. 关于JAVA数组的几点注意事项与一些低级错误

    1.数组不是集合,它只能保存同种类型的多个原始类型或者对象的引用.数组保存的仅仅是对象的引用,而不是对象本身. 2.数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型 ...

  6. php 递归删除目录

    /* * 递归删除目录 */ function deletedir($dir){ if($handle = @opendir($dir)){ while($file = readdir($handle ...

  7. Unity性能优化专题---腾讯牛人分享经验

    这里从三个纬度来分享下内存的优化经验:代码层面.贴图层面.框架设计层面. 一.代码层面. 1.foreach. Mono下的foreach使用需谨慎.频繁调用容易触及堆上限,导致GC过早触发,出现卡顿 ...

  8. loj #6014. 「网络流 24 题」最长 k 可重区间集

    #6014. 「网络流 24 题」最长 k 可重区间集 题目描述 给定实直线 L LL 上 n nn 个开区间组成的集合 I II,和一个正整数 k kk,试设计一个算法,从开区间集合 I II 中选 ...

  9. Python——变量的引用和函数的参数和返回值的传递方式

    变量的引用 在python中,所有的变量都是指向地址,变量本身不保存数据,而是保存数据在内存中的地址.我们用下面的程序来理解: a = 10 print(id(a)) a = 11 print(id( ...

  10. 蓝牙4.0BLE抓包(三) – 扫描请求和扫描响应

    版权声明:本文为博主原创文章,转载请注明作者和出处.    作者:强光手电[艾克姆科技-无线事业部] 1. 扫描请求和扫描响应 广播包含扫描请求SCAN_REQ和扫描响应SCAN_RSP. 扫描请求: ...