Team Build使用.NET Core 2.0 + .Net Standard 2.0恢复Nuget失败

时间:2018-04-17 15:57:31

标签: visual-studio-2017 nuget tfsbuild nuget-package-restore

我有一个VS2017解决方案,其中包含一个引用.NET Standard 2.0类库的.NET Core 2.0控制台项目,以及许多其他NuGet包。该解决方案在我的开发机器上构建良好。

当我尝试使用NuGet 4.0.0或4.1.0在TFS构建服务器上运行NuGet还原时,出现以下错误:

    Package (mypackagename) 1.0.0 is not compatible with netcoreapp2.0 (.NETCoreApp,Version=v2.0). Package (mypackagename) 1.0.0 supports:
  - net35 (.NETFramework,Version=v3.5)
  - netstandard2.0 (.NETStandard,Version=v2.0)

此错误消息类似于Nuget restore fails for ASP.NET Core 2.0 project on build server中描述的消息,因此我尝试了其中建议的解决方案,即使用NuGet 4.3.0或更高版本。我已尝试从4.3.0到4.6.2的所有已发布版本,这次我从NuGet恢复中收到以下错误:

2018-04-17T15:45:15.2611952Z Value cannot be null.
2018-04-17T15:45:15.2611952Z Parameter name: key
2018-04-17T15:45:15.2611952Z System.ArgumentNullException: Value cannot be null.
2018-04-17T15:45:15.2611952Z Parameter name: key
2018-04-17T15:45:15.2611952Z    at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
2018-04-17T15:45:15.2611952Z    at NuGet.Commands.RestoreCommandProvidersCache.GetOrCreate(String globalPackagesPath, IReadOnlyList`1 fallbackPackagesPaths, IReadOnlyList`1 sources, SourceCacheContext cacheContext, ILogger log)
2018-04-17T15:45:15.2611952Z    at NuGet.Commands.DependencyGraphSpecRequestProvider.Create(String projectNameToRestore, ExternalProjectReference project, HashSet`1 projectReferenceClosure, RestoreArgs restoreArgs, DependencyGraphSpec projectDgSpec)
2018-04-17T15:45:15.2611952Z    at NuGet.Commands.DependencyGraphSpecRequestProvider.GetRequestsFromItems(RestoreArgs restoreContext, DependencyGraphSpec dgFile)
2018-04-17T15:45:15.2611952Z    at NuGet.Commands.DependencyGraphSpecRequestProvider.CreateRequests(RestoreArgs restoreContext)
2018-04-17T15:45:15.2611952Z    at NuGet.Commands.RestoreRunner.<CreatePreLoadedRequests>d__11.MoveNext()
2018-04-17T15:45:15.2611952Z --- End of stack trace from previous location where exception was thrown ---

有关如何使其正常工作的任何建议吗?

1 个答案:

答案 0 :(得分:0)

我通过在Team Build的“获取源代码”任务中设置“Clean = True”来修复此问题。

执行此操作后,我可以使用最新版本的NuGet(4.6.2),它不再抛出上面的ArgumentNullException。

我怀疑NuGet中存在一个错误,它会被之前版本中遗留的文件弄糊涂。