【问题标题】:where does the "Unable to find fallback package folder" nuget error come from, when building project in a dockerfile?在 dockerfile 中构建项目时,“无法找到后备包文件夹”nuget 错误来自哪里?
【发布时间】:2020-07-05 04:24:21
【问题描述】:

从 dockerfile 构建时,我得到以下信息:

/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018: The "ResolvePackageAssets" task failed unexpectedly. [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018: NuGet.Packaging.Core.PackagingException: Unable to find fallback package folder '/usr/local/share/dotnet/sdk/NuGetFallbackFolder'. [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at NuGet.Packaging.FallbackPackagePathResolver..ctor(String userPackageFolder, IEnumerable`1 fallbackPackageFolders) [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at Microsoft.NET.Build.Tasks.NuGetPackageResolver.CreateResolver(IEnumerable`1 packageFolders) [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at Microsoft.NET.Build.Tasks.NuGetPackageResolver.CreateResolver(LockFile lockFile) [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at Microsoft.NET.Build.Tasks.ResolvePackageAssets.CacheWriter..ctor(ResolvePackageAssets task) [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at Microsoft.NET.Build.Tasks.ResolvePackageAssets.CacheReader.CreateReaderFromDisk(ResolvePackageAssets task, Byte[] settingsHash) [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at Microsoft.NET.Build.Tasks.ResolvePackageAssets.CacheReader..ctor(ResolvePackageAssets task) [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at Microsoft.NET.Build.Tasks.ResolvePackageAssets.ReadItemGroups() [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at Microsoft.NET.Build.Tasks.ResolvePackageAssets.ExecuteCore() [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at Microsoft.NET.Build.Tasks.TaskBase.Execute() [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/src/test/test.fsproj]
/usr/share/dotnet/sdk/3.1.102/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(234,5): error MSB4018:    at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/src/test/test.fsproj]

Build FAILED.

一个更易读的版本是这样的:

The "ResolvePackageAssets" task failed unexpectedly. [/src/test/test.fsproj]
NuGet.Packaging.Core.PackagingException: Unable to find fallback package folder '/usr/local/share/dotnet/sdk/NuGetFallbackFolder'. [/src/test/test.fsproj]
   at NuGet.Packaging.FallbackPackagePathResolver..ctor(String userPackageFolder, IEnumerable`1 fallbackPackageFolders) [/src/test/test.fsproj]
   at Microsoft.NET.Build.Tasks.NuGetPackageResolver.CreateResolver(IEnumerable`1 packageFolders) [/src/test/test.fsproj]
   at Microsoft.NET.Build.Tasks.NuGetPackageResolver.CreateResolver(LockFile lockFile) [/src/test/test.fsproj]
   at Microsoft.NET.Build.Tasks.ResolvePackageAssets.CacheWriter..ctor(ResolvePackageAssets task) [/src/test/test.fsproj]
   at Microsoft.NET.Build.Tasks.ResolvePackageAssets.CacheReader.CreateReaderFromDisk(ResolvePackageAssets task, Byte[] settingsHash) [/src/test/test.fsproj]
   at Microsoft.NET.Build.Tasks.ResolvePackageAssets.CacheReader..ctor(ResolvePackageAssets task) [/src/test/test.fsproj]
   at Microsoft.NET.Build.Tasks.ResolvePackageAssets.ReadItemGroups() [/src/test/test.fsproj]
   at Microsoft.NET.Build.Tasks.ResolvePackageAssets.ExecuteCore() [/src/test/test.fsproj]
   at Microsoft.NET.Build.Tasks.TaskBase.Execute() [/src/test/test.fsproj]
   at Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() [/src/test/test.fsproj]
   at Microsoft.Build.BackEnd.TaskBuilder.ExecuteInstantiatedTask(ITaskExecutionHost taskExecutionHost, TaskLoggingContext taskLoggingContext, TaskHost taskHost, ItemBucket bucket, TaskExecutionMode howToExecuteTask) [/src/test/test.fsproj]

Build FAILED.

这是一个工作中的 dockerfile:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 as build

WORKDIR /src/
COPY . /src/
RUN dotnet build -c Release -o /app test/test.fsproj

FROM build AS publish
RUN dotnet publish -c Release -o /app --no-restore test/test.fsproj

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 as final

WORKDIR /app
COPY --from=publish /app .

CMD ["dotnet", "test.dll"]

项目 Test.fsproj 依赖于其他项目,但我在这里对其进行了简化以显示什么不起作用:

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 as build

WORKDIR /src/
COPY test/test.fsproj ./test/
COPY test/common/libraries/mathematics/mathematics.fsproj ./test/common/libraries/mathematics/
RUN dotnet restore test/test.fsproj

COPY . /src/
RUN dotnet build -c Release -o /app test/test.fsproj

FROM build AS publish
RUN dotnet publish -c Release -o /app --no-restore test/test.fsproj

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 as final

WORKDIR /app
COPY --from=publish /app .

CMD ["dotnet", "test.dll"]

这个版本不工作。我要做的是通过复制主项目及其依赖项、匹配文件夹布局来进行还原,以便 docker 可以创建一层保留在缓存中并且不会不断恢复 nuget 包。 在锁定区域,我现在依靠 sim 卡上网,每次构建时重新下载 nuget 包完全是浪费。

我不明白我得到的 nuget 错误。恢复工作,然后构建,在失败之后。

【问题讨论】:

    标签: docker .net-core build nuget dockerfile


    【解决方案1】:

    我下载了一个 ZIP 项目并在构建它时遇到了同样的问题。通过检查 nuget 包的来源解决了此问题- 工具->Nuget 包管理器-> 包管理器设置-> Nuget 包管理器-> 包源

    检查软件包的来源。这可能会导致问题。

    【讨论】:

      【解决方案2】:

      我想到了很多事情。

      ###1:使用以下标签编辑 csproj:

        <PropertyGroup>
          <RestoreFallbackFolders>clear</RestoreFallbackFolders>
        </PropertyGroup>
      

      ###2:更新 Dockerfile。

      dotnet sdk 没有错误文件夹。

      root@bd6d24a2e56b:/# cd /usr/local/share/dotnet/sdk/NuGetFallbackFolder
      bash: cd: /usr/local/share/dotnet/sdk/NuGetFallbackFolder: No such file or directory
      

      在 FROM 下添加 RUN 命令:

      FROM mcr.microsoft.com/dotnet/core/sdk:3.1 as build
      RUN mkdir -p /usr/local/share/dotnet/sdk/NuGetFallbackFolder
      

      【讨论】:

      • 它现在失败了:它声称找不到子项目的依赖关系。例如,数学子项目依赖于 ta-lib。在恢复过程中,ta-lib 被启动,但在构建过程中它声称它丢失了。
      【解决方案3】:

      有同样的问题。经过一番谷歌搜索后,我发现了这个不错的问题:https://github.com/dotnet/dotnet-docker/issues/2050

      在这里回顾一下答案:如果您已经在 Docker 之外构建了项目,那么您将拥有输出文件夹,这些文件夹将被复制到导致此问题的 Docker 构建环境中。

      然后解决方案是添加一个.dockerignore 文件以防止这种情况发生。像这样的小东西应该可以解决问题:

      # directories
      **/bin/
      **/obj/
      **/out/
      
      # files
      Dockerfile*
      **/*.md
      

      【讨论】:

      • 你完全正确!那是我的情况。为我节省了很多时间!在我的情况下,我一直在从 Windows 构建,并且我从 linux 容器中遇到了一个关于 C:\Program Files (x86)\Microsoft\Xamarin\NuGet\ 的错误,这太荒谬了。您的帖子立即对其进行了解释,并且正在修复。
      【解决方案4】:

      要解决此错误“无法找到回退包文件夹”,您需要在该目录中创建一个空文件夹,如下所示: /usr/local/share/dotnet/sdk/NuGetFallbackFolder

      【讨论】:

        猜你喜欢
        • 2021-05-26
        • 2018-04-06
        • 1970-01-01
        • 1970-01-01
        • 2021-11-09
        • 2019-03-31
        • 2019-01-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多