Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add NuGet packages to the Dockerfile build steps?

I have a small .NET Framework 4.6.2 application with a few NuGet package references. On executing: docker build -t myapp . I receive the error: Could not resolve this reference. for each of the referenced NuGet packages.

I have tried:

  • Adding RUN ["dotnet", "restore"] to restore the packages from the .csproj
  • Changing the image tag to :4.6.2

How do I add the NuGet packages to the build proces?

Thanks for your time!

Dockerfile:

FROM microsoft/dotnet-framework-build:4.7.1 as build-env

WORKDIR /app
COPY . /app

RUN ["dotnet", "build"]

FROM microsoft/dotnet-framework:4.7.1
WORKDIR /app
COPY --from=build-env /app .

ENTRYPOINT ["MessageProcessor.exe"]

Full error for a single reference from the Build step:

C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets(2041,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "GreenPipes, Version=1.2.1.98, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors. [C:\app\MessageProcessor.csproj]
like image 536
Wijnand Avatar asked Feb 06 '18 12:02

Wijnand


People also ask

How do I manually add NuGet to project?

To find and install a NuGet package with Visual Studio, follow these steps: Load a project in Solution Explorer, and then select Project > Manage NuGet Packages. The NuGet Package Manager window opens. Select the Browse tab to display packages by popularity from the currently selected source (see Package sources).

How do I add NuGet package source to Visual Studio?

In Visual Studio, select Tools, and then select Options. Select NuGet Package Manager, and then select Package Sources. Enter the feed's Name and Source URL, and then select the green (+) sign to add a new package source.


1 Answers

Figured it out.

MSBuild (RUN ["dotnet", "restore"]) doesn't restore the NuGet packages for some reasons explained here. So I started playing around with nuget.exe commands and that worked eventually.

FROM microsoft/dotnet-framework-build:4.7.1 as build-env

WORKDIR /app
COPY . /app
RUN nuget.exe restore MessageProcessor.csproj -SolutionDirectory ../ -Verbosity normal
RUN MSBuild.exe MessageProcessor.csproj /t:build /p:Configuration=Release /p:OutputPath=./out

FROM microsoft/dotnet-framework:4.7.1
WORKDIR /app
COPY --from=build-env app/out .

ENTRYPOINT ["MessageProcessor.exe"]

This leaves me a nice clean and shiny .NET Framework 4.6.2 Docker container.

like image 196
Wijnand Avatar answered Sep 29 '22 20:09

Wijnand