环境准备:

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. The user specified as a definer (”@sa’%') does not exist 解决方法

    mysql数据库报错The user specified as a definer (”@sa’%') does not exist.尝试过两种方式,第一种重启之后好用,但是一会就又不好用了.第二种算 ...

  2. Python - selenium_WebDriver 鼠标键盘事件

    from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_cha ...

  3. MongoDB整理笔记のReplica Sets

    MongoDB支持在多个机器中通过异步复制达到故障转移和实现冗余.多机器中同一时刻只有一台机器是用于写操作,正因为如此,MongoDB提供了数据一致性的保障.而担当primary角色的机器,可以把读的 ...

  4. perationalError: (2003, "Can't connect to MySQL server on u'192.168.1.6' (timed out)")

    在Ubuntu(192.168.1.20)中部署项目后,mysql还在另外一台windows(192.168.1.6)机子上,ping windows时可以ping通,但是访问项目提示: perati ...

  5. GraphQL 优势之处

    一次查询,搞定需求 举个例子,Book对象有bookTypeId,那我想看对应的bookTypeName,bookType对应的summary咋办? 如果你用RESTful Api ,免不了要定制接口 ...

  6. SQL Server 常用函数总结

    SQL去空格函数 1.ltrim(‘内容’)--去掉字符左边的空格 代码如下 declare @str varchar(100) set @str=' ADFADF' select @str sele ...

  7. GitHub团队协作流程

    说来惭愧,这么长时间,第一次参与修改开源项目,所以整理了一份GitHub团队协作流程,作为备忘,文章大部分内容参考https://www.cnblogs.com/schaepher/p/4933873 ...

  8. javascript 视频播放指定的时间段

    javascript 视频播放指定的时间段 一.html5 vedio: //指定开始时间 player.currentTime=startPoint; player.play(); //使用事件来控 ...

  9. springMVC+spring+mybatis多数据源配置

    1.application.properties配置 <?xml version="1.0" encoding="UTF-8"?> <bean ...

  10. go语言排序

    冒泡: package main import ( "fmt" ) func BubbleSort(arr []int) []int { // 改进的冒泡排序 num := len ...