无法加载文件或程序集 'Microsoft.AspNet.Security.DataProtection'

Could not load file or assembly 'Microsoft.AspNet.Security.DataProtection'

升级到最新版本的 asp.net-5 堆栈时,我在尝试访问我的 SignalR 集线器时遇到了以下堆栈跟踪。

FileNotFoundException: Could not load file or assembly 'Microsoft.AspNet.Security.DataProtection, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMarkHandle stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName, ObjectHandleOnStack type) System.RuntimeTypeHandle.GetTypeByName(String name, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean loadTypeFromPartialName) System.RuntimeType.GetType(String typeName, Boolean throwOnError, Boolean ignoreCase, Boolean reflectionOnly, StackCrawlMark& stackMark) System.Type.GetType(String typeName, Boolean throwOnError) Microsoft.AspNet.DataProtection.KeyManagement.XmlKeyManager.ParseKeyElement(XElement keyElement) Microsoft.AspNet.DataProtection.KeyManagement.XmlKeyManager.GetAllKeys() Microsoft.AspNet.DataProtection.KeyManagement.KeyRingProvider.CreateCachedKeyRingInstanceUnderLock(DateTime utcNow, CachedKeyRing existingCachedKeyRing) Microsoft.AspNet.DataProtection.KeyManagement.KeyRingProvider.GetCurrentKeyRing() Microsoft.AspNet.DataProtection.KeyManagement.KeyRingBasedDataProtector.Protect(Byte[] unprotectedData) Microsoft.AspNet.SignalR.Infrastructure.DataProtectionProviderProtectedData.Protect(String data, String purpose)

我知道这个程序集已经重命名 Microsoft.AspNet.DataProtection 并且我从 aspnet github 存储库中看到这个更改 SEEMS 已经波及到其他项目。

我删除了对旧程序集的所有引用,搜索了 .k 目录、我的项目目录、我的 GAC 的所有内容。

当然,经过 4 个小时的尝试,我在 post 提出问题后立即发现了奇怪的原因:

之所以搜索我的整个硬盘驱动器以查找任何可能提及的旧程序集却一无所获,是因为对它的引用被巧妙地加密在我的 %APPDATA% 目录中的 XML 文件中,该文件由旧版本程序集!

使用新程序集名称升级到新版本时,必须删除目录的内容:%APPDATA%\Local\ASP.NET\keys-BETA,否则会出现此错误!此目录中的 xml 文件包含解密器的程序集限定类名的加密表示,它将使用旧的 "Security.DataProtection" 程序集而不是新的。

与 Avi Cherry 类似,我发现我在从 .NET Core (DNX) RC1 迁移到 (DotNet) RC2 时遇到了这个问题。

我需要删除的目录是%localappdata%\ASP.NET\DataProtection-Keys

里面的xml引用了Microsoft.AspNet.Security.DataProtection,本来应该是Microsoft.AspNetCore...。我没有尝试更改它,而是删除了目录。

我无法评论其他答案,因此需要添加我自己的答案。 正如其他人所说,您需要删除的内容 %localappdata%\ASP.NET\DataProtection-Keys 目录。

但不要删除整个文件夹。这可能会在以后导致 dotnetcore 应用程序出现问题。 Visual Studio 可能会说 "debugging is starting" 然后就挂了。