7

I have created a C# project (C# 7.0 & .net framework 4.7.2) and also added some unit tests (NUnit 3.11.0).

This code is stored in a Gitlab repo and I can run the tests and build locally. But now I want to automate this via the Gitlab CI. According to this stackoverflow post and a lot of articles on the internet you should create your own runner on a Windows machine.

But most of those answers are already pretty old and the Gitlab CI can now work with Docker images. But then I arrive at my problem. What image should I use for this runner? I've tried microsoft/dotnet-framework and microsoft/dotnet but those didn't work.

The microsoft/dotnet-framework gives the error message: No such image: microsoft/dotnet-framework

and the microsoft/dotnet images doesn't contain the .net 4.7.2 library so it can't be used for a build.


Gitlab CI + Docker image + C# build?

Is it still not possible to create a Gitlab CI runner with a Docker image for a C# build (console application)? Or am I just doing something wrong here?

My current .gitlab-ci.yml

image: microsoft/dotnet-framework

stages:
  - build

before_script:
  - 'dotnet restore'

app-build:
  stage: build
  script:
    - 'dotnet build'
  only:
    - master

Update

Do thanks to @Andreas Zita I now have an Image (dsfnctnl/gitlab-dotnetcore-builder:0.15.0). Unfortunately this gives me the same error as the microsoft/dotnet. This is probebly an error in my build script (or so I hope), but I cannot seem to find what it is.

The error:

$ dotnet restore
  Nothing to do. None of the projects specified contain packages to restore.
$ dotnet build
Microsoft (R) Build Engine version 15.9.20+g88f5fadfbe for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  Nothing to do. None of the projects specified contain packages to restore.
/usr/share/dotnet/sdk/2.1.500/Microsoft.Common.CurrentVersion.targets(1179,5): error MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.7.2" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend. [/builds/test/TestProject.csproj]
/usr/share/dotnet/sdk/2.1.500/Microsoft.Common.CurrentVersion.targets(1179,5): error MSB3644: The reference assemblies for framework ".NETFramework,Version=v4.7.2" were not found. To resolve this, install the SDK or Targeting Pack for this framework version or retarget your application to a version of the framework for which you have the SDK or Targeting Pack installed. Note that assemblies will be resolved from the Global Assembly Cache (GAC) and will be used in place of reference assemblies. Therefore your assembly may not be correctly targeted for the framework you intend. [/builds/test/TestProjectTests.csproj]

Build FAILED.
Mr.wiseguy
  • 4,092
  • 10
  • 35
  • 67
  • 1
    The `microsoft/` images are windows images. You need to look for a linux-based c# builder image. – tkausl Nov 22 '18 at 15:51
  • dsfnctnl/gitlab-dotnetcore-builder? (I have not tested it) – Andreas Zita Nov 22 '18 at 16:00
  • @tkausl Ah that confirms my Thoughts. Then I should probably look for a Linux image with Mono. – Mr.wiseguy Nov 22 '18 at 16:01
  • @AndreasZita, Thanks! (manifest not found -->) nvm. had to add a specific version number. – Mr.wiseguy Nov 22 '18 at 16:06
  • The dotnet have images for both platforms, Linux or Windows. But they run dotnet core only. – Matheus Valiente Souza Nov 22 '18 at 20:18
  • @Mr.wiseguy - did you get the solution for your above. If yes can you please post your answer. I am working on same . CI CD for console application using GitLab and deployment to AWS EC2 windows server. – Gaurav Upadhyay Jan 11 '19 at 08:25
  • Hi @GauravUpadhyay, unfortunately I did not find a solution for the problem. The docker images do not contain the .net framework, so the application cannot be build via the images. I have not yet invested any time in creating a docker image that contains the framework. – Mr.wiseguy Jan 14 '19 at 19:30
  • 1
    @Mr.wiseguy - I found the solution with Mono image. I wrote the GitLab CICD configuration for build pipeline using the Mono image. I am posting that as a answer. let me know if you found that useful – Gaurav Upadhyay Jan 16 '19 at 11:24

2 Answers2

2

I think if you use .net framework 4.7.2 and you want to build painless, you need Windows with Visual Studio MSBuild. Maybe it helps: https://medium.com/@n3d4ti/build-net-project-with-gitlab-ci-44e6c3562a8

n3d4ti
  • 121
  • 1
  • 12
0

Mono image is working for me to build the C# application in GitLab.

    image: mono:4.4.0.182

     stages:
      - build
    app-build:
      stage: build
      script:
        - MONO_IOMAP=case xbuild/t:Build/p:Configuration="Debug"/p:Platform="x86"
          myApp.sln
    only:
       - master

Platform might be change according to the build configuration like AnyCPU.

Gaurav Upadhyay
  • 414
  • 4
  • 12