代码之家  ›  专栏  ›  技术社区  ›  Colin Mackay

Docker build抱怨找不到nuget回退包文件夹

  •  1
  • Colin Mackay  · 技术社区  · 6 年前

    我正在学习 https://docs.microsoft.com/en-us/dotnet/core/docker/docker-basics-dotnet-core#dockerize-the-net-core-application 学习如何将.net核心应用程序包含到Docker中。

    除了改变 Dockerfile 指向 microsoft/dotnet:2.1-sdk 作为基础图像,并添加 RUN dotnet --info 行以获取版本/环境信息,其他内容都相同。但是,我在 dotnet publish 步骤:

    Step 7/8 : RUN dotnet publish -c Release -o out
     ---> Running in 6739267c7581
    Microsoft (R) Build Engine version 15.8.166+gd4e8d81a88 for .NET Core
    Copyright (C) Microsoft Corporation. All rights reserved.
    
      Restore completed in 34.46 ms for /app/Hello.csproj.
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018: The "ResolvePackageAssets" task failed unexpectedly. [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018: NuGet.Packaging.Core.PackagingException: Unable to find fallback package folder 'C:\Program Files\dotnet\sdk\NuGetFallbackFolder'. [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018:    at NuGet.Packaging.FallbackPackagePathResolver..ctor(String userPackageFolder, IEnumerable`1 fallbackPackageFolders) [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018:    at Microsoft.NET.Build.Tasks.NuGetPackageResolver.CreateResolver(LockFile lockFile, String projectPath) [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018:    at Microsoft.NET.Build.Tasks.ResolvePackageAssets.CacheWriter..ctor(ResolvePackageAssets task, Stream stream) [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018:    at Microsoft.NET.Build.Tasks.ResolvePackageAssets.CacheReader.CreateReaderFromDisk(ResolvePackageAssets task, Byte[] settingsHash) [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018:    at Microsoft.NET.Build.Tasks.ResolvePackageAssets.CacheReader..ctor(ResolvePackageAssets task) [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018:    at Microsoft.NET.Build.Tasks.ResolvePackageAssets.ReadItemGroups() [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018:    at Microsoft.NET.Build.Tasks.ResolvePackageAssets.ExecuteCore() [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018:    at Microsoft.NET.Build.Tasks.TaskBase.Execute() [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/app/Hello.csproj]
    /usr/share/dotnet/sdk/2.1.401/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(198,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/app/Hello.csproj]
    The command '/bin/sh -c dotnet publish -c Release -o out' returned a non-zero code: 1
    


    如果有帮助的话 dotnet --info

    Step 3/8 : RUN dotnet --info
     ---> Running in 17dad2f04a7e
    .NET Core SDK (reflecting any global.json):
     Version:   2.1.401
     Commit:    91b1c13032
    
    Runtime Environment:
     OS Name:     debian
     OS Version:  9
     OS Platform: Linux
     RID:         debian.9-x64
     Base Path:   /usr/share/dotnet/sdk/2.1.401/
    
    Host (useful for support):
      Version: 2.1.3
      Commit:  124038c13e
    
    .NET Core SDKs installed:
      2.1.401 [/usr/share/dotnet/sdk]
    
    .NET Core runtimes installed:
      Microsoft.AspNetCore.All 2.1.3 [/usr/share/dotnet/shared/Microsoft.AspNetCore.All]
      Microsoft.AspNetCore.App 2.1.3 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
      Microsoft.NETCore.App 2.1.3 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
    
    To install additional .NET Core runtimes or SDKs:
      https://aka.ms/dotnet-download
    
    1 回复  |  直到 6 年前
        1
  •  21
  •   Gareth    6 年前

    obj\project.assests.json

    例如.

    "packageFolders": {
      "C:\\Users\\<UserName>\\.nuget\\packages\\": {},
      "C:\\Program Files\\dotnet\\sdk\\NuGetFallbackFolder": {}
    },
    

    一个简单的解决方法是在Dockerfile中添加一个步骤来删除 bin obj find 程序:

    find -type d -name bin -prune -exec rm -rf {} \; && find -type d -name obj -prune -exec rm -rf {} \;
    

    以链接到的教程中的Dockerfile为例,如下所示:

    FROM microsoft/dotnet:2.1-sdk
    WORKDIR /app
    
    # copy csproj and restore as distinct layers
    COPY *.csproj ./
    RUN dotnet restore
    
    # copy and build everything else
    COPY . ./
    RUN find -type d -name bin -prune -exec rm -rf {} \; && find -type d -name obj -prune -exec rm -rf {} \;
    RUN dotnet publish -c Release -o out
    ENTRYPOINT ["dotnet", "out/Hello.dll"]
    
        2
  •  16
  •   user5262411    6 年前

    .dockerignore
    .env
    .git
    .gitignore
    .vs
    .vscode
    docker-compose.yml
    docker-compose.*.yml
    **/bin
    **/obj
    bin/
    obj/
    
        3
  •  2
  •   Mohamed Selim    5 年前

    如果docker容器属于linux系列,请添加此标志 -r linux-x64 对于publish命令,这个标志应该包括构建“(大多数桌面发行版,如CentOS、Debian、Fedora、Ubuntu和衍生物)”;因此publish命令应该如下所示 RUN dotnet publish -r linux-x64 -c Release -o out https://docs.microsoft.com/en-us/dotnet/core/rid-catalog

        4
  •  0
  •   xisket    5 年前

    在我的例子中,在检查了所有这些响应后,问题仍然存在,唯一的解决方案是重新启动docker桌面。