我遇到了一个nuget / docker构建问题,我花了几天的时间进行调试,但想法不见了:您知道为什么我遇到以下错误吗?
问题在于一个asp.net核心解决方案(其他非常相似的解决方案不受影响):尽管我可以使用docker compose文件在Visual Studio 2019中构建受影响的解决方案,但无法使用dockerfile起作用,因此docker build命令无法运行。
如果我通过在命令提示符下进行以下构建来运行dockerfile:
docker build -f MStoreBosGateway/MStoreBosGatewayApi/Dockerfile --pull --no-cache -t mstorebosgateway:0.041 .
然后出现以下错误:
Step 11/26 : RUN dotnet restore "MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj"
> ---> Running in 30819cb5db4f
> /usr/share/dotnet/sdk/2.2.402/NuGet.targets(123,5): error : An error
> occurred while retrieving package metadata for
> 'System.Text.Encodings.Web.4.5.0' from source
> '/usr/share/dotnet/sdk/NuGetFallbackFolder'.
> [/src/MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj]
> /usr/share/dotnet/sdk/2.2.402/NuGet.targets(123,5): error : Root
> element is missing.
> [/src/MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj]
> The command '/bin/sh -c dotnet restore
> "MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj"'
> returned a non-zero code: 1
我在dockerfile中的每一行之后都放置了RUN echo命令,因此看起来是造成此问题的dotnet还原。如果我自己运行dotnet restore命令,则运行正常。
为解决此问题,我做了很多事情,例如
- -从该解决方案和项目中删除obj和bin文件夹,
- -已卸载并重新安装的nuget,
- -删除了nuget缓存以强制重新下载软件包,
- -卸载并重新安装dotnet core sdks,
- -从项目文件中删除了错误消息('System.Text.Encodings.Web.4.5.0)中提到的包(这样做 不会导致任何错误,因此无论如何都必须是多余的)。那确实 不会影响此错误,它会还原此软件包,因此必须有 还有其他事情说要使用此软件包或可能的系统软件包 还是默认情况下都包含了。
我的同事可以构建此项目,并已将其可以复制的副本发送给我;我在构建他的副本时遇到了同样的问题,因此假设它在项目外部。
如果我在docker文件中的dotnet restore命令中添加了“ –verbosity details”,则在输出下方添加了
。 GET https://api.nuget.org/v3-flatcontainer/microsoft.extensions.dependencyinjection.abstractions/index.json
OK https://api.nuget.org/v3-flatcontainer/aspnet.security.oauth.validation/index.json 342ms
GET https://api.nuget.org/v3-flatcontainer/aspnet.security.oauth.validation/2.0.0/aspnet.security.oauth.validation.2.0.0.nupkg
OK https://api.nuget.org/v3-flatcontainer/aspnet.security.oauth.validation/2.0.0/aspnet.security.oauth.validation.2.0.0.nupkg 52ms
GET https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.authentication/index.json
GET https://api.nuget.org/v3-flatcontainer/newtonsoft.json/10.0.2/newtonsoft.json.10.0.2.nupkg
1>/usr/share/dotnet/sdk/2.2.402/NuGet.targets(123,5): error : An error occurred while retrieving package metadata for 'System.Text.Encodings.Web.4.5.0' from source '/usr/share/dotnet/sdk/NuGetFallbackFolder'. [/src/MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj]
/usr/share/dotnet/sdk/2.2.402/NuGet.targets(123,5): error : Root element is missing. [/src/MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj]
OK https://api.nuget.org/v3-flatcontainer/swashbuckle.aspnetcore.swaggergen/index.json 156ms
GET https://api.nuget.org/v3-flatcontainer/swashbuckle.aspnetcore.swaggergen/4.0.1/swashbuckle.aspnetcore.swaggergen.4.0.1.nupkg
OK https://api.nuget.org/v3-flatcontainer/swashbuckle.aspnetcore.swaggerui/index.json 160ms
GET https://api.nuget.org/v3-flatcontainer/swashbuckle.aspnetcore.swaggerui/4.0.1/swashbuckle.aspnetcore.swaggerui.4.0.1.nupkg
OK https://api.nuget.org/v3-flatcontainer/automapper/index.json 155ms
GET https://api.nuget.org/v3-flatcontainer/automapper/8.0.0/automapper.8.0.0.nupkg
OK https://api.nuget.org/v3-flatcontainer/swashbuckle.aspnetcore.swaggergen/4.0.1/swashbuckle.aspnetcore.swaggergen.4.0.1.nupkg 44ms
OK https://api.nuget.org/v3-flatcontainer/swashbuckle.aspnetcore.swaggerui/4.0.1/swashbuckle.aspnetcore.swaggerui.4.0.1.nupkg 49ms
GET https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.mvc.apiexplorer/index.json
GET https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.mvc.core/index.json
GET https://api.nuget.org/v3-flatcontainer/microsoft.aspnetcore.mvc.dataannotations/index.json
NuGet.Protocol.Core.Types.Fatalprotocolexception: An error occurred while retrieving package metadata for 'System.Text.Encodings.Web.4.5.0' from source '/usr/share/dotnet/sdk/NuGetFallbackFolder'. ---> NuGet.Packaging.Core.PackagingException: An error occurred while retrieving package metadata for 'System.Text.Encodings.Web.4.5.0' from source '/usr/share/dotnet/sdk/NuGetFallbackFolder'. ---> system.xml.XmlException: Root element is missing.
at system.xml.XmltextreaderImpl.Throw(Exception e)
at system.xml.XmltextreaderImpl.ParseDocumentContent()
at system.xml.XmltextreaderImpl.Read()
at system.xml.Linq.XDocument.Load(XmlReader reader,LoadOptions options)
at NuGet.Packaging.Core.NuspecCoreReaderBase.LoadXml(Stream stream,Boolean leaveStreamOpen)
at NuGet.Packaging.Core.NuspecCoreReaderBase..ctor(Stream stream,Boolean leaveStreamOpen)
at NuGet.Packaging.NuspecReader..ctor(Stream stream)
at NuGet.Protocol.LocalPackageFileCache.GetNuspec(String manifestPath,String expandedPath)
at NuGet.Protocol.LocalPackageFileCache.<>c__DisplayClass6_1.<GetOrAddNuspec>b__1()
at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)
at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication,Boolean useDefaultConstructor)
at System.Lazy`1.CreateValue()
at NuGet.Protocol.LocalV3FindPackageByIdResource.ProcessnuspecReader[T](String id,NuGetVersion version,Func`2 process)
--- End of inner exception stack trace ---
--- End of inner exception stack trace ---
at NuGet.Protocol.LocalV3FindPackageByIdResource.ProcessnuspecReader[T](String id,Func`2 process)
at NuGet.Protocol.LocalV3FindPackageByIdResource.GetDependencyInfoAsync(String id,SourceCacheContext cacheContext,ILogger logger,CancellationToken cancellationToken)
at NuGet.Commands.SourceRepositoryDependencyProvider.GetDependenciesCoreAsync(libraryIdentity match,NuGetFramework targetFramework,CancellationToken cancellationToken)
at NuGet.Commands.SourceRepositoryDependencyProvider.<>c__DisplayClass21_0.<<GetDependenciesAsync>b__0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at NuGet.Commands.SourceRepositoryDependencyProvider.GetDependenciesAsync(libraryIdentity libraryIdentity,CancellationToken cancellationToken)
at NuGet.DependencyResolver.ResolverUtility.CreateGraphItemAsync(RemoteMatch match,NuGetFramework framework,CancellationToken cancellationToken)
at NuGet.DependencyResolver.ResolverUtility.FindlibraryEntryAsync(libraryRange libraryRange,String runtimeIdentifier,RemoteWalkContext context,CancellationToken cancellationToken)
at NuGet.DependencyResolver.RemoteDependencyWalker.CreateGraphNode(libraryRange libraryRange,String runtimeName,RuntimeGraph runtimeGraph,Func`2 predicate,GraphEdge`1 outerEdge)
at NuGet.DependencyResolver.RemoteDependencyWalker.CreateGraphNode(libraryRange libraryRange,GraphEdge`1 outerEdge)
at NuGet.Commands.ProjectRestoreCommand.WalkDependenciesAsync(libraryRange projectRange,RemoteDependencyWalker walker,CancellationToken token)
at NuGet.Commands.ProjectRestoreCommand.TryRestoreAsync(libraryRange projectRange,IEnumerable`1 frameworkRuntimePairs,NuGetv3LocalRepository userPackageFolder,IReadOnlyList`1 fallbackPackageFolders,RemoteDependencyWalker remoteWalker,Boolean forceRuntimeGraphCreation,CancellationToken token,Telemetryactivity telemetryactivity)
at NuGet.Commands.RestoreCommand.ExecuteRestoreAsync(NuGetv3LocalRepository userPackageFolder,Telemetryactivity telemetryactivity)
at NuGet.Commands.RestoreCommand.ExecuteAsync(CancellationToken token)
at NuGet.Commands.RestoreRunner.ExecuteAsync(RestoreSummaryRequest summaryRequest,CancellationToken token)
at NuGet.Commands.RestoreRunner.ExecuteAndCommitAsync(RestoreSummaryRequest summaryRequest,CancellationToken token)
at NuGet.Commands.RestoreRunner.CompletetaskAsync(List`1 restoretasks)
at NuGet.Commands.RestoreRunner.RunAsync(IEnumerable`1 restoreRequests,RestoreArgs restoreContext,CancellationToken token)
at NuGet.Commands.RestoreRunner.RunAsync(RestoreArgs restoreContext,CancellationToken token)
at NuGet.Build.Tasks.Restoretask.ExecuteAsync(ILogger log)
Done executing task "Restoretask" -- FAILED.
1>Done building target "Restore" in project "MStoreBOSGatewayApi.csproj" -- FAILED.
1>Done Building Project "/src/MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj" (Restore target(s)) -- FAILED.
Build FAILED.
"/src/MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj" (Restore target) (1) ->
(Restore target) ->
/usr/share/dotnet/sdk/2.2.402/NuGet.targets(123,5): error : An error occurred while retrieving package metadata for 'System.Text.Encodings.Web.4.5.0' from source '/usr/share/dotnet/sdk/NuGetFallbackFolder'. [/src/MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj]
/usr/share/dotnet/sdk/2.2.402/NuGet.targets(123,5): error : Root element is missing. [/src/MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj]
0 Warning(s)
1 Error(s)
Time Elapsed 00:00:04.70
The command '/bin/sh -c dotnet restore "MStoreBOSGateway/MStoreBOSGatewayApi/MStoreBOSGatewayApi.csproj" --verbosity detailed' returned a non-zero code: 1
C:\Applications\VB2017Apps\MStoreBOSGateway>