利用dotnet和mono在Linux上构建.NET项目

时间:2024-03-28 09:46:15

环境

  • centos7.2
  • jenkins
  • dotnet-sdk-2.2
  • mono-devel

安装dotnet-sdk

参考链接:https://dotnet.microsoft.com/learn/dotnet/hello-world-tutorial/install

  1. $ sudo rpm -Uvh https://packages.microsoft.com/config/rhel/7/packages-microsoft-prod.rpm
  2. $ sudo yum install dotnet-sdk-2.2

安装mono

参拷链接:https://www.mono-project.com/download/stable/#download-lin-centos

  1. $ rpm --import "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF"
  2. $ su -c 'curl https://download.mono-project.com/repo/centos7-stable.repo | tee /etc/yum.repos.d/mono-centos7-stable.repo'
  3. $ yum install mono-devel

第一次测试代码编译发布

省去从svn拉取代码的步骤,接下来使用dotnet命令对拉取的代码进行编译发布。
进入到项目的.csproj目录,执行以下命令:

$ dotnet publish -c release --runtime centos.7-x64

利用dotnet和mono在Linux上构建.NET项目
报错提示找不到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>

提醒

  1. 因为测试使用项目的Target Frameworknet461,所以我将FrameworkPathOverride的路径指向导mono的路径。
    以上我是参考了github上关于dotnet sdk的issues,参考链接:
    https://github.com/dotnet/sdk/issues/335
  2. 路径**/usr/lib/mono**是mono提供的netframework库的路径

第二次测试代码编译发布

 $ dotnet publish -c release --runtime centos.7-x64

利用dotnet和mono在Linux上构建.NET项目
此次,除了一些警告,可以顺利通过dotnet进行编译发布。

后续

我们可以将编译发布的移植到jenkins上,因为jenkins没有利用dotnet编译.net的插件,所以只能用Execute Shell插件,命令行编译。