持续集成 Jenkins 上用 Sonar 扫描 unity C# 项目

Wrynn · January 20, 2017 · 1354 hits

Linux 用了好久,没有接触过 windows 和 C#,花了一天时间各种折腾,把踩过的坑记录下来:
首先是环境:
windows 10 构建节点一个
MSBuild 14(build tools)
Jenkins 环境一个
.Net framework4.5

过程:
配置好了 jenkins,直接搞发现提交到了 Sonar 后没有结果,这是因为 C# 项目需要进行编译然后在提交,采用 SonarQubeScanner for MSBuild 来扫描。
这个插件使用方式分三段

SonarQubeScanner for MSBuild-Begin Analysis ->编译 -> SonarQubeScanner for MSBuild-End Analysis

这个没有难度,难度就是编译。。。开始虐啊

最开始提示找不到.NET Framework v3.5 Service Pack 1

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(983,5): error MSB3645: .NET Framework v3.5 Service Pack 1 was not found. In order to target ".NETFramework,Version=v3.5,Profile=Unity Full v3.5", .NET Framework v3.5 Service Pack 1 or later must be installed.

编译机明明是 4.5 的 framework 啊!于是折腾了开发的 ide,打开后发现 unity3d 有个设置默认是 3.5 的 framework,安装 framework3.5 呗,这个东东很奇怪,下载下来全包安装是会卡在 searching feature 和 downloading files 两个步骤,妈卖批的!!全包你校验个锤子啊!网上各种搜解决方法,最好的方法就是无限换网,重启,一遍不行换个网,再试,还不行就重启再试,上完了 3.5,这个问题解决了,然后:

error CS2001

这个需要查看检出到节点上的代码,理论上应该构建完就清空的,但是为了调试方便,我关了那个配置,发现是由于开发的合作问题导至的缺失项目文件,促膝长谈了 5min,他们决定统一路径。然后:

error CS0246: The type or namespace name 'xxx' could not be found

这个是类库问题,各种找啊,从热锅上的蚂蚁变成冰箱里的大象,冷静下来学习一下 MSBuild 的构建过程:
1.从目录的中指定的 xxxx.sln 开始,找到相关的 project,文章内容大致是

Visual Studio 2015

Project("{xxx-xxx-xxx-xxx}") = "trunk.CSharp", "trunk.CSharp.csproj", "{xxx-xxx-xxx-xxx}"
2.到工程中描述的 trunk.CSharp.csproj 文件中,看看相关的 Reference 和 ItemGroup 是否都在本机中被检出,这个过程影响了编译是否成功
由于 Reference 里边全是需要的第三方 dll,这个存在 Library 文件夹中,这个文件夹开发往往不会上传到 svn,所以需要单独索要,但是每次扫描都要一次太麻烦了,干脆直接放到.net 公共资源库里,路径如下:
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v3.5\Profile\Unity Full v3.5\
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v3.5\Profile\Unity Subset v3.5

3.进行编译
尝试编译,这之间一定要可开发保证代码的一致性,很多错误都是由于开发自己维护自己的开发路径产生的。

终于编译完成,提示:

No ProjectInfo.xml files were found. Possible causes: 
1. The project has not been built - the end step was called right after the begin step, without a build step in between 
2. An unsupported version of MSBuild has been used to build the project. Currently MSBuild 12.0 upwards are supported
3. The build step has been launched from a different working folder
Generation of the sonar-properties file failed. Unable to complete SonarQube analysis.

临门一脚没进球啊!!
问题是指定的 MSBuild.exe 版本不对,因为我的电脑里边有好多个 MSBuild,所以我开始的时候瞎写了一个,编译没问题,但是仔细看第二条,需要 12 版本以上的

现在的微软没有单独的 MSBuild 了,这个东东叫:Build Tools(我一直认为微软是最能装 B 的公司,秒 IBM 好几条街),就不会好好说英语么。。。

找了一下正确的路径:

"C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe"

这个才是正统啊
然后。。。

喜迎小绿勾,SonarQube 上也有结果了

一天下来,对于一个完全不懂 C# 和 Unity 的人,把这个东西折腾明白了,洪荒之力已经用尽,我得找个地方吃点儿大腰子补补···

No Reply at the moment.
需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up