Xamarin.forms UWP-无法解析程序集或Windows元数据文件

Xamarin.forms UWP-无法解析程序集或Windows元数据文件,xamarin.forms,uwp,Xamarin.forms,Uwp,一切都进展顺利,直到几天前,UWP在从VSTS(git)拉取新版本后突然停止构建,错误如下: 无法解析程序集或Windows元数据文件“类型universe无法解析程序集:X.Core,版本=1.0.0.0,区域性=中性,PublicKeyToken=null。” 无法复制文件“obj\x86\Debug\MainPage.xbf”,因为找不到该文件 无法复制文件“obj\x86\Debug\App.xbf”,因为找不到该文件 无法复制文件“obj\x86\Debug\X.Mobile.UWP

一切都进展顺利,直到几天前,UWP在从VSTS(git)拉取新版本后突然停止构建,错误如下:

  • 无法解析程序集或Windows元数据文件“类型universe无法解析程序集:X.Core,版本=1.0.0.0,区域性=中性,PublicKeyToken=null。”
  • 无法复制文件“obj\x86\Debug\MainPage.xbf”,因为找不到该文件
  • 无法复制文件“obj\x86\Debug\App.xbf”,因为找不到该文件
  • 无法复制文件“obj\x86\Debug\X.Mobile.UWP.xr.xml”,因为找不到该文件
我有以下解决方案结构:

  • X.Core(.NET标准类库)
  • X.移动(.NET标准PCL)
  • X.Mobile.UWP(UWP特定项目)
UWP引用Mobile,Mobile引用Core(Core也被web API项目引用)

我从源代码管理获取的提交对X.Mobile.UWP.csproj文件没有任何更改

我尝试过的事情:

  • 必须进行清洁和重建
  • 删除整个解决方案的所有obj和bin文件夹
  • 删除并重新添加.UWP项目中的所有引用
  • 将Xamarin.Forms升级至最新版本(3.1.0.637273)
  • 在X.Mobile项目中删除并重新添加X.Core引用
  • 删除C:\Users\%username%.nuget文件夹
  • 将Microsoft.NETCore.UniversalWindowsPlatform更新至最新版本(6.1.5)
  • 将目标版本更改为所有可用版本-我们已经在build 16299上运行了几个月
  • 我已经断断续续地为这个问题绞尽脑汁好几天了。Android和iOS项目构建得很好,考虑到UWP一直是我们最稳定的平台,这很讽刺。有人有什么见解吗

    编辑: 在将对X.Core的引用直接添加到X.Mobile.UWP项目之后,我就可以编译了。但这不应该是答案,因为UWP从未直接引用Core。

    我找到了解决方案

    我遇到了同样的问题,因为我在Xamarin.Forms解决方案中添加了一个新的(.Net标准2.0类库)项目

    简而言之,最初我的解决方案包括以下项目:

    BackgroundTaskTest (which have all my Views and ViewModels)
    BackgroundTaskTest.Android
    BackgroundTaskTest.iOS
    BackgroundTaskTest.UWP
    
    突然,我决定在同一个解决方案文件夹中添加一个名为“BackgroundTaskTest.Common”的类库:

    BackgroundTaskTest.Common (new one)
    BackgroundTaskTest (which have all my Views and ViewModels)
    BackgroundTaskTest.Android
    BackgroundTaskTest.iOS
    BackgroundTaskTest.UWP
    
    Android可以很好地使用它,但是UWP项目不喜欢这个新邻居(在你的例子中,它被命名为“X.Core”)。所以我把我的类从那个新项目移到了“BackgroundTaskTest”中,并从我的解决方案中删除了“BackgroundTaskTest.Common”和所有引用,它已经开始工作了


    要最终确定并使其简短,请将您的X.Mobile.csproj文件与X.Mobile.Core.csproj文件进行比较。你会在差异中发现问题所在。另外,请检查您对X.Core项目的所有依赖项,以确保它们是相同的。

    我安装了NuGet软件包“NETStandard.Library”,并在我的UWP项目中添加了对所有.Net标准库的引用。这为我解决了问题

    什么是.Net标准PCL?如果没有详细的可复制项目,我看不到这个问题,你会创建一个最小的复制样本吗?.NET标准PCL是“共享”项目。最初的.NET Core PCL已被弃用,因此在VS2017中创建项目时,代码共享策略的选项是共享项目和.NET标准。显然,我无法在一个全新的项目中重现同样的结构。如果可以的话,我会继续尝试复制并添加到GitHub的链接。通过添加与UWP项目等效的“公共”解决了这个问题。真奇怪。