利用dotnet和mono在Linux上构建.NET项目
环境
- centos7.2
- jenkins
- dotnet-sdk-2.2
- mono-devel
安装dotnet-sdk
参考链接:https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install
$ sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
$ sudo yum install dotnet-sdk-2.2
安装mono
参拷链接:https://www.mono-project.com/download/stable/#download-lin-centos
$ rpm --import "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
$ su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'
$ yum install mono-devel
第一次测试代码编译发布
省去从svn拉取代码的步骤,接下来使用dotnet命令对拉取的代码进行编译发布。
进入到项目的.csproj目录,执行以下命令:
$ dotnet publish -c release --runtime centos.7-x64
报错提示找不到netframework 4.6.1,缺少引导。
修改.csproj配置,增加netframework引导
在每个项目的.csproj文件中写入以下配置
<PropertyGroup>
<TargetFramework>net461</TargetFramework>
<RuntimeIdentifiers>win7-x86;centos.7-x86</RuntimeIdentifiers>
</PropertyGroup>
<PropertyGroup Condition="'$(TargetFramework)'== 'net461'">
<FrameworkPathOverride>/usr/lib/mono/4.6.1-api/</FrameworkPathOverride>
</PropertyGroup>
提醒
- 因为测试使用项目的Target Framework是net461,所以我将FrameworkPathOverride的路径指向导mono的路径。
以上我是参考了github上关于dotnet sdk的issues,参考链接:
https://github.com/dotnet/sdk/issues/335 - 路径**/usr/lib/mono**是mono提供的netframework库的路径
第二次测试代码编译发布
$ dotnet publish -c release --runtime centos.7-x64
此次,除了一些警告,可以顺利通过dotnet进行编译发布。
后续
我们可以将编译发布的移植到jenkins上,因为jenkins没有利用dotnet编译.net的插件,所以只能用Execute Shell插件,命令行编译。