我正在使用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.Data
和System.IdentityModel.Tokens.Jwt
图标的不同之处。当我试图检查后者的属性时,VS说没有安装包,这显然是这样做的。构建成功,但应用程序不会加载正确的版本。
答案 0 :(得分:0)
您可以执行几个步骤来检查是否加载了正确的版本:
HintPath
以获取引用该包的项目文件中的引用。只需在文本编辑器中打开文件,然后查找以<Reference Include="System.IdentityModel.Tokens.Jwt
开头的XML标记。确保未设置特定于版本的引用或版本与packages.config
文件中的版本匹配。Path
条目必须指向已安装的包。因此,路径应指向解决方案目录中的packages
目录,并指向目录System.IdentityModel.Tokens.Jwt.4.0.4.403061554
。在大多数情况下(根据我的经验),packages.config
文件和项目文件中的引用之间存在一些不匹配。如果这没有帮助,请确保您的应用程序没有加载其他模块,该版本在版本System.IdentityModel.Tokens.Jwt
中引用了5.2.1.0
。
答案 1 :(得分:0)
到目前为止,仍然不清楚为什么VS无法处理NuGet包的更改,以及为什么它认为我的项目同时使用.Net Framework
和.Net Standard
。我打赌这是一个但是在VS中,希望MS能尽快解决它。
在此之前,安装Rider并使用它来修复软件包,然后回到VS,一切都恢复正常。