2017-06-12 42 views
5

我需要一個Dockerfile的工作示例來創建.NET構建服務器鏡像。設置碼頭工MS構建服務器鏡像

不管我安裝,我得到以下錯誤,當試圖建立我的項目與容器:

錯誤MSB3644:爲框架的引用程序集」 .NETFramework,版本= v4.5.2"沒有找到。要解決此問題,請爲此框架版本安裝SDK或Targeting Pack,或將您的應用程序重定向到您安裝了SDK或Targeting Pack的框架版本。請注意,程序集將從全局程序集緩存(GAC)中解析出來,並將用於代替引用程序集。因此,您的程序集可能無法正確定位您想要的框架。

我現在Dockerfile看起來是這樣的:

# escape=` 
FROM microsoft/dotnet-framework:4.6.2 
MAINTAINER [email protected] 

SHELL ["powershell"] 

RUN New-Item -ItemType directory -Path "C:\tools" 

WORKDIR C:\tools\ 

RUN Invoke-WebRequest -Uri "https://go.microsoft.com/fwlink/p/?linkid=845298" -OutFile "winsdksetup.exe" -UseBasicParsing 
RUN .\winsdksetup.exe /q /norestart 

# Note: Install .Net 4.5.2 
RUN Invoke-WebRequest -Uri "https://download.microsoft.com/download/E/2/1/E21644B5-2DF2-47C2-91BD-63C560427900/NDP452-KB2901907-x86-x64-AllOS-ENU.exe" -OutFile "NDP452-KB2901907-x86-x64-AllOS-ENU.exe" -UseBasicParsing 
RUN .\NDP452-KB2901907-x86-x64-AllOS-ENU.exe /q /norestart 

# Note: Install .Net 4.6.2 
RUN Invoke-WebRequest -Uri "https://download.microsoft.com/download/F/9/4/F942F07D-F26F-4F30-B4E3-EBD54FABA377/NDP462-KB3151800-x86-x64-AllOS-ENU.exe" -OutFile "NDP462-KB3151800-x86-x64-AllOS-ENU.exe" -UseBasicParsing 
RUN .\NDP462-KB3151800-x86-x64-AllOS-ENU.exe /q /norestart 

# Note: Install .Net 4.6 Targeting Pack 
RUN Invoke-WebRequest -Uri "https://download.microsoft.com/download/C/3/A/C3A5200B-D33C-47E9-9D70-2F7C65DAAD94/NDP46-KB3045557-x86-x64-AllOS-ENU.exe" -OutFile "NDP46-KB3045557-x86-x64-AllOS-ENU.exe" -UseBasicParsing 
RUN .\NDP46-KB3045557-x86-x64-AllOS-ENU.exe /q /norestart 

RUN Invoke-WebRequest "https://download.microsoft.com/download/A/6/3/A637DB94-8BA8-43BB-BA59-A7CF3420CD90/vs_BuildTools.exe" -OutFile "vs_buildtools.exe" -UseBasicParsing 
RUN .\vs_buildtools.exe --add Microsoft.VisualStudio.Workload.MSBuildTools --quiet --wait 

# Note: Add .NET + ASP.NET 
RUN Install-WindowsFeature NET-Framework-45-ASPNET ; ` 
Install-WindowsFeature Web-Asp-Net45 

# Note: Add NuGet 
RUN Invoke-WebRequest "https://dist.nuget.org/win-x86-commandline/latest/nuget.exe" -OutFile "C:\tools\nuget.exe" -UseBasicParsing 

# Note: Add NUnit 
RUN Invoke-WebRequest "https://github.com/nunit/nunit-console/releases/download/3.6.1/NUnit.Console-3.6.1.zip" -OutFile "NUnit.Console-3.6.1.zip" -UseBasicParsing 
RUN Expand-Archive "NUnit.Console-3.6.1.zip" -DestinationPath "C:\tools\nunit" 

# Note: Add DotNet Core 
RUN Invoke-WebRequest "https://download.microsoft.com/download/E/7/8/E782433E-7737-4E6C-BFBF-290A0A81C3D7/dotnet-dev-win-x64.1.0.4.zip" -OutFile "dotnet-dev-win-x64.1.0.4.zip" -UseBasicParsing 
RUN Expand-Archive "dotnet-dev-win-x64.1.0.4.zip" -DestinationPath "C:\tools\dotnet" 

# Note: Add to PATH 
RUN setx PATH '%PATH%;C:\tools;C:\tools\dotnet;C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin' 
RUN setx MSBuildSDKsPath 'C:\tools\dotnet\sdk\1.0.4\Sdks' 

這到底是怎麼失蹤了?

回答

2

您的dockerfile安裝了4.6 Targeting包,但沒有安裝4.5.2的定位包。

這些文件需要在

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2 

的MSBuild的正確解決這些問題

+0

謝謝!我不知道你需要安裝所有的定位包。我認爲他們是向後兼容的。 – jonasm