【问题标题】:.NetStandard nuget package issues with .NETFramework.NETFramework 的 .NetStandard nuget 包问题
【发布时间】:2019-04-22 18:00:03
【问题描述】:

我有 3 个项目:

  1. 我安装了 .NETStandard 2.0 中的 SDK System.IdentityModel.Tokens.Jwt (5.4.0) nuget 包。
  2. .NETCore 2.1 中的 ASP.NET Core API
  3. .NETFramework 4.7.2 中的 ASP.NET API

并且在两个 api 中都引用了 sdk,我在 .NETCore api 中没有任何问题,但在 .NetFramework api 中出现错误:

Could not load file or assembly 'Microsoft.IdentityModel.Tokens, Version=5.4.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

不应该在 .NETFramework 和 .NET 核心中都支持 .NETStandard?我错过了什么?

【问题讨论】:

  • 原因可能是您让您的 .NET Standard 项目使用 System.IdentityModel.Tokens.Jwt 作为参考,而 NuGet 解析了它的 .NET Standard 2.0 版本。 https://www.nuget.org/packages/System.IdentityModel.Tokens.Jwt/ 表示它具有特定于 .NET Framework 的程序集,应将其作为引用添加到您的 ASP.NET API 项目中。
  • @LexLi 你说得对,我在 csproj 文件中添加了<TargetFrameworks>netstandard2.0;net461</TargetFrameworks>。并解决了

标签: asp.net jwt nuget-package .net-standard


【解决方案1】:

扩展了上面的评论。

许多 NuGet 包确实包含针对不同目标平台的不同程序集(例如 netxx 和 netstandardxx),并且这些程序集不可互换。

因此,当项目结构如下时,您遇到了问题,

net472 项目 --depends-->netstandard20 项目 --depends on--> System.IdentityModel.Tokens.Jwt (netstandard20)

因为这样net472项目消耗了NuGet包的netstandard20副本,导致报错。

有多种解决方法,您的解决方案只是其中一种,将 netstandard20 项目修改为多目标(netstandard20 和 net461)。这告诉 NuGet 为 net472 项目提供正确的程序集,然后一切开始工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    相关资源
    最近更新 更多