Skip to content

使用 Jenkins 自动编译 C# 项目

🏷️ Jenkins C#

  1. 安装插件 MSBuild Plugin

    安装后再构建步骤中会多一个【Build a Visual Studio project or solution using MSBuild】选项。

  2. 配置 MSBuild

    在【系统管理】->【全局工具配置】->【MSBuild】中添加本地已安装的 MSBuild

  3. 在 Job 的构建中添加 MSBuild 步骤

配置时踩到的坑

  1. error CS1041 & error CS1617

    xxx.cs(13,7): error CS1041: 应输入标识符;“static”是关键字 [D:\jenkins\workspace\workspace\xxx\xxx\xxx.csproj]
    xxx.cs(13,14): error CS1518: 应输入 class、delegate、enum、interface 或 struct [D:\jenkins\workspace\workspace\xxx\xxx\xxx.csproj]

    原因是有个 class 中使用了 C# 6.0 的语法 using static 来引入静态类。开发使用的 VS2015 中是可以正常编译。

    手动将工程属性【langversion】改为 6,或者使用【/p:langversion=6】参数构建时,又输出了如下错误:

    CSC : error CS1617: 选项“6”对 /langversion 无效;必须是 ISO-1、ISO-2、3、4、5 或 Default [D:\jenkins\workspace\workspace\xxx\xxx\xxx.csproj]

    这说明本机安装的安装 MSBuild 版本不支持 C# 6.0 的语法。

    确认了下本机安装的 MSBuild 确实是对应 .Net Framework 4.5 的。おかしい!

    最后去 微软官网 下载了最新版的 Visual Studio 2017 生成工具(好在可以单独安装),再在【系统管理】->【全局工具配置】->【MSBuild】新增一个配置,在 Job 的构建中选择该 MSBuild 就行了。




  2. error CS0246

    error CS0246: 未能找到类型或命名空间名“Nest”(是否缺少 using 指令或程序集引用?)

    项目遗留问题,工程文件中的引用设置的比较乱,有些虽然在 VS 中可以正常编译,通过 MSBuild 编译时就会出现该错误。
    这个只需要把对应的引用删除,然后添加一个正确位置的引用就行了。

  1. MSBuild 命令行参考