升级到最新版本的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,一切。
答案 0 :(得分:12)
当然,经过4个小时的努力来解决这个问题后,我在发布问题后立即发现了它的奇怪原因:
为了任何可能提及的旧程序集而搜索我的整个硬盘驱动器之所以没有任何原因是因为在旧版程序集创建的%APPDATA%目录中的XML文件中,它的引用被巧妙地加密了!
使用新的程序集名称升级到新版本时,必须删除目录的内容:%APPDATA%\ Local \ ASP.NET \ keys-BETA,否则您将收到此错误!此目录中的xml文件包含解密器的程序集限定类名的加密表示,该表示将使用旧的“Security.DataProtection”程序集而不是新程序集。
答案 1 :(得分:2)
与Avi Cherry类似,我发现我有这个问题从.NET Core(DNX)RC1转移到(DotNet)RC2。
我需要删除的目录是Microsoft.AspNet.Security.DataProtection
。
引用Microsoft.AspNetCore...
内的xml,应该是<properties>
<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
</properties>
。我没有尝试更改它,而是删除了目录。
答案 2 :(得分:1)
我无法评论其他答案,所以需要添加我自己的答案。 正如其他人所说,你需要删除的内容 %LOCALAPPDATA%\ ASP.NET \ DataProtection密钥 。目录
但请勿删除整个文件夹。这可能会导致dotnetcore应用程序出现问题。 Visual Studio可能会说&#34;调试正在开始&#34;然后挂起。