构建

时间:2018-03-01 10:19:47

标签: visual-studio-2017 nuget

我正在使用VS 2017.我在packages.config文件中有这一行。

<package id="System.IdentityModel.Tokens.Jwt" version="4.0.4.403061554" targetFramework="net461" />

我尝试启动.net应用程序时遇到此错误。

System.TypeLoadException: Could not load type 'System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause' from assembly 'System.IdentityModel.Tokens.Jwt, Version=5.2.1.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35

因为版本5.2.1.0中确实不存在System.IdentityModel.Tokens.NamedKeySecurityKeyIdentifierClause。但似乎NuGet只是忽略了版本规范,并且总是加载最新版本。

我试图清理NuGet缓存,清理并重建整个解决方案,然后重新启动计算机......

我还能做些什么吗?

更新

我在VS 2017中观察到一件奇怪的事情。请注意System.DataSystem.IdentityModel.Tokens.Jwt图标的不同之处。当我试图检查后者的属性时,VS说没有安装包,这显然是这样做的。构建成功,但应用程序不会加载正确的版本。

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以执行几个步骤来检查是否加载了正确的版本:

  1. 重建您的解决方案以确保所有NuGet包都已恢复,并且已启动的应用程序是最新的(您已经这样做了)。
  2. 检查标记HintPath以获取引用该包的项目文件中的引用。只需在文本编辑器中打开文件,然后查找以<Reference Include="System.IdentityModel.Tokens.Jwt开头的XML标记。确保未设置特定于版本的引用或版本与packages.config文件中的版本匹配。
  3. 检查Visual Studio中相应引用的属性是否正确解析。这意味着,解决方案资源管理器中的引用上必须没有黄色感叹号图标,并且在引用的属性中,Path条目必须指向已安装的包。因此,路径应指向解决方案目录中的packages目录,并指向目录System.IdentityModel.Tokens.Jwt.4.0.4.403061554
  4. 在大多数情况下(根据我的经验),packages.config文件和项目文件中的引用之间存在一些不匹配。如果这没有帮助,请确保您的应用程序没有加载其他模块,该版本在版本System.IdentityModel.Tokens.Jwt中引用了5.2.1.0

答案 1 :(得分:0)

到目前为止,仍然不清楚为什么VS无法处理NuGet包的更改,以及为什么它认为我的项目同时使用.Net Framework.Net Standard。我打赌这是一个但是在VS中,希望MS能尽快解决它。

在此之前,安装Rider并使用它来修复软件包,然后回到VS,一切都恢复正常。