2015-02-27 7 views
5

Durante l'aggiornamento alle versioni più recenti dello stack asp.net-5, ho rilevato la seguente traccia di stack durante il tentativo di accedere al mio hub SignalR.Impossibile caricare il file o l'assembly 'Microsoft.AspNet.Security.DataProtection'

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)

Capisco che questa assemblea è stato rinominato Microsoft.AspNet.DataProtection e vedo dai repository GitHub ASPNET che questo cambiamento sembra aver increspato attraverso gli altri progetti.

Ho eliminato tutti i riferimenti al vecchio assembly, ho cercato il contenuto INTERO della directory .k, la mia directory di progetto, il mio GAC, TUTTO.

risposta

11

Naturalmente, dopo 4 ore di cercare di capire questo, scopro la bizzarra causa di esso subito dopo ho posto la domanda:

Il motivo per cui perlustrando il mio intero disco rigido per l'eventuale menzione della vecchia il montaggio non è stato risolto perché il riferimento ad esso è stato abilmente CRIPTATO in un file XML nella mia directory% APPDATA% creata dalla vecchia versione dell'assembly!

Quando si esegue l'aggiornamento alla nuova versione con il nuovo nome assembly, è necessario eliminare il contenuto della directory:% APPDATA% \ Local \ ASP.NET \ keys-BETA o si verificherà questo errore! Il file xml in questa directory contiene una rappresentazione crittografata del nome classe qualificato del decryptor, che utilizzerà il vecchio assembly "Security.DataProtection" invece del nuovo.

+0

Correggere, basta eliminare quella cartella e starai bene. Un'altra correzione è stata apportata poco dopo tale modifica per rimuovere la necessità di eliminare la cartella. – Eilon

2

Analogamente a Avi Cherry, ho riscontrato un problema durante lo spostamento da .NET Core (DNX) RC1 a (DotNet) RC2.

La directory che dovevo eliminare era %localappdata%\ASP.NET\DataProtection-Keys.

L'xml all'interno referenziato Microsoft.AspNet.Security.DataProtection, che avrebbe dovuto essere Microsoft.AspNetCore.... Invece di provare a cambiarlo, ho appena rimosso la directory.

1

Non posso commentare le altre risposte, quindi è necessario aggiungere il mio. Come altri hanno già detto, è necessario eliminare il CONTENUTO della directory % localappdata% \ ASP.NET \ DataProtection-Keys .

Ma NON eliminare l'intera cartella. Ciò può causare problemi per le app dotnetcore in seguito. Visual Studio potrebbe dire "debugging sta iniziando" e basta appendere.