【问题标题】:error XA2006 with IAuthenticationHandler when linking链接时使用 IAuthenticationHandler 出现错误 XA2006
【发布时间】:2021-10-07 04:37:52
【问题描述】:

我在链接到 SDK 程序集和构建项目时遇到了这个异常:

Java.Interop.Tools.Diagnostics.XamarinAndroidException: error XA2006: Could not resolve reference to 'Microsoft.AspNetCore.Http.Features.Authentication.IAuthenticationHandler' (defined in assembly 'Microsoft.AspNetCore.Http, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60') with scope 'Microsoft.AspNetCore.Http.Features, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. When the scope is different from the defining assembly, it usually means that the type is forwarded.

我添加了 Signalr.Client v. 3.1.2 以便在 Xamarin 中使用 Signalr。

这是 PCL csproj:

<PackageReference Include="Fody" Version="6.1.1">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Forms.Controls.FlexButton" Version="0.11.0" />
    <PackageReference Include="Microsoft.AppCenter" Version="3.0.0" />
    <PackageReference Include="Microsoft.AppCenter.Analytics" Version="3.0.0" />
    <PackageReference Include="Microsoft.AppCenter.Crashes" Version="3.0.0" />
    <PackageReference Include="Microsoft.AppCenter.Push" Version="3.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="3.1.2" />
    <PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="3.1.2" />
    <PackageReference Include="Plugin.XSnack" Version="1.0.17" />
    <PackageReference Include="PropertyChanged.Fody" Version="3.2.6" />
    <PackageReference Include="Rg.Plugins.Popup" Version="1.2.0.223" />
    <PackageReference Include="sqlite-net-pcl" Version="1.6.292" />
    <PackageReference Include="Xam.Plugin.Media" Version="4.0.1.5" />
    <PackageReference Include="Xamanimation" Version="1.3.0" />
    <PackageReference Include="Xamarin.FFImageLoading" Version="2.4.11.982" />
    <PackageReference Include="Xamarin.FFImageLoading.Forms" Version="2.4.11.982" />
    <PackageReference Include="Xamarin.FFImageLoading.Transformations" Version="2.4.11.982" />
    <PackageReference Include="Xamarin.Forms" Version="4.5.0.356" />
    <PackageReference Include="Xamarin.Essentials" Version="1.5.1" />
    <PackageReference Include="Xamarin.Forms.RangeSlider" Version="1.0.2" />
    <PackageReference Include="Xamarin.Forms.Visual.Material" Version="4.5.0.356" />
    <PackageReference Include="XamForms.HtmlLabel" Version="1.0.0" />

这是 Xamarin Android csproj:

<PackageReference Include="Forms.Controls.FlexButton">
      <Version>0.11.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter">
      <Version>3.0.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter.Analytics">
      <Version>3.0.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter.Crashes">
      <Version>3.0.0</Version>
    </PackageReference>
    <PackageReference Include="Microsoft.AppCenter.Push">
      <Version>3.0.0</Version>
    </PackageReference>
    <PackageReference Include="Rg.Plugins.Popup">
      <Version>1.2.0.223</Version>
    </PackageReference>
    <PackageReference Include="Xam.Plugin.Media">
      <Version>4.0.1.5</Version>
    </PackageReference>
    <PackageReference Include="Xamanimation">
      <Version>1.3.0</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.FFImageLoading">
      <Version>2.4.11.982</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.FFImageLoading.Forms">
      <Version>2.4.11.982</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.FFImageLoading.Transformations">
      <Version>2.4.11.982</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Forms" Version="4.5.0.356" />
    <PackageReference Include="Xamarin.Android.Support.Core.Utils" Version="28.0.0.3" />
    <PackageReference Include="Xamarin.Essentials" Version="1.5.1" />
    <PackageReference Include="Xamarin.Forms.RangeSlider">
      <Version>1.0.2</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.Forms.Visual.Material">
      <Version>4.5.0.356</Version>
    </PackageReference>
    <PackageReference Include="XamForms.HtmlLabel">
      <Version>1.0.0</Version>
    </PackageReference>

project.assets.json 文件对旧版本的 Microsoft.AspNetCore.Http.Features 有两个依赖项

"Microsoft.AspNetCore.Http.Abstractions/2.2.0": {
  "type": "package",
  "dependencies": {
    "Microsoft.AspNetCore.Http.Features": "2.2.0",
    "System.Text.Encodings.Web": "4.5.0"
  },
  "compile": {
    "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": {}
  },
  "runtime": {
    "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": {}
  }
},

"Microsoft.AspNetCore.Hosting.Server.Abstractions/2.2.0": {
  "type": "package",
  "dependencies": {
    "Microsoft.AspNetCore.Http.Features": "2.2.0",
    "Microsoft.Extensions.Configuration.Abstractions": "2.2.0"
  },
  "compile": {
    "lib/netstandard2.0/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll": {}
  },
  "runtime": {
    "lib/netstandard2.0/Microsoft.AspNetCore.Hosting.Server.Abstractions.dll": {}
  }
},

所有其他参考3.1.2版本。

请帮助我了解我是否应该使用任何其他版本的包,或者是否应该对其中任何一个使用“跳过链接程序集”。

谢谢

【问题讨论】:

  • .net core 3.x removed this interface 。发布您的 csproj 和所有使用过的 nugets
  • 尝试删除 obj/bin 文件夹并重新构建应用程序。
  • 在obj文件夹里有一个project.assets.json,打开看看你用的哪个nuget包有这个依赖,我只看到3.1.2跨度>
  • @magicandre1981,这就是我知道的问题。 Microsoft.AspNetCore.Http.Features 有两个版本(3.1.2 和 2.2.0)。问题是如何从编译好的项目和生成的project.assets.json文件中去掉2.2.0版本。
  • 它被列为直接使用还是作为 nuget 包的依赖项(显示为 "dependencies": { )?

标签: c# xamarin.forms signalr asp.net-core-signalr


【解决方案1】:

错误信息

错误 XA2006:无法解析对 'Microsoft.AspNetCore.Http.Features.Authentication.IAuthenticationHandler' (在程序集中定义'Microsoft.AspNetCore.Http, Version=2.2.0.0, 文化=中性,PublicKeyToken=adb9793829ddae60') 与范围 'Microsoft.AspNetCore.Http.Features, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'。

以及project.assets.json中的入口:

"Microsoft.AspNetCore.Http.Abstractions/2.2.0": {
  "type": "package",
  "dependencies": {
    "Microsoft.AspNetCore.Http.Features": "2.2.0",
    "System.Text.Encodings.Web": "4.5.0"
  },
  "compile": {
    "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": {}
  },
  "runtime": {
    "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": {}
  }
},

表明您仍在使用旧的 asp.net core 2.2 参考。

shared project 显示是否被引用:

<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="2.2.0" />

并将其与 3.1.2 引用混合

<PackageReference Include="Microsoft.AspNetCore.Http.Features" Version="3.1.2" />

导致您的问题。

在此处删除“Microsoft.AspNetCore.Mvc”条目以修复它。

【讨论】:

  • 我现在明白了,MVC 核心库不应该存在或在 Xamarin 项目中被继承,因为它们存在版本冲突。谢谢。
  • 非常感谢,我也遇到了类似的问题。 tldr - 记得检查你共享项目的 csproj 文件。
猜你喜欢
  • 1970-01-01
  • 2014-10-05
  • 2017-09-23
  • 2012-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多