Sintomi
Si supponga di usare un provider di archiviazione BLOB remoti personalizzato insieme a Runtime .NET Framework 4,0 per archiviare i BLOB in remoto per Microsoft SharePoint 2013. Quando si prova a eseguire la pulizia del Garbage che chiama internamente Microsoft. Data. SqlRemoteBlobs. Maintainer. exe, viene visualizzato il messaggio di errore seguente durante la procedura di Garbage Collection:
Avvio delle attività del manutentore. Avvio di Garbage Collection. Inizio analisi di riferimento. <tempo>: Err: 0::: AssemblyLoad::: si è verificato un errore durante la lettura del file di estensione XXXX. RemoteBlobStoreProvider. dll. <Time>: Err: 0::: AssemblyLoad::: System. BadImageFormatException: questo assembly è compilato da un runtime più recente del Runtime attualmente caricato e non può essere caricato. (Eccezione da HRESULT: 0x8013101B) <ora>: Err: 0::: AssemblyLoad::: in System. Reflection. assembly. nLoadFile (percorso stringa, evidenza evidence) <ora>: Err: 0::: AssemblyLoad::: in System. Reflection. assembly. LoadFile (path string) <Time>: Err: 0::: AssemblyLoad::: in Microsoft. Data. SqlRemoteBlobs. ProviderClass. Initialize ()
Lo strumento manutentore viene compilato tramite il runtime di .NET Framework 2,0 e non può caricare assembly basati su .NET Framework 4,0 per l'enumerazione di BLOB e Garbage Collection. Per qualsiasi applicazione .NET Framework, è possibile usare il file di configurazione dell'applicazione e aggiungere il tag supportedRuntime per usare la versione successiva di .NET Framework. Il file di configurazione del componente maintainer è Microsoft. Data. SqlRemoteBlobs. MaintainerConfig. XML, come illustrato nell'esempio seguente:
<startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
Se si tenta di eseguire la pulizia della procedura di Garbage Collection, Microsoft. Data. SqlRemoteBlobs. Maintainer. exe incontra un'eccezione di violazione di Access, come indicato di seguito:
System. AccessViolationException: tentativo di lettura o scrittura della memoria protetta. Spesso si tratta di un'indicazione che l'altra memoria è danneggiata. in System. Text. StringBuilder. AppendFormat (IFormatProvider provider, String format, Object [] args) in Microsoft. Data. SqlRemoteBlobs. InformationUtilities. InformationDetails () at Microsoft. Data. BlobStores. LogProvider. CreateHeaderInformation () at Microsoft. Data. BlobStores. LogProvider. Initialize (LogLevel logLevel) at Microsoft. Data. BlobStores. DebugPrint. InitializeProviders () at Microsoft. Data. BlobStores. DebugPrint. Initialize (Boolean initializeProviders) su Microsoft. Data. BlobStores. DebugPrint. WriteLine (OperationType Operation, LogLevel Level, Int32 blobStoreId, Exception Exception, String message, Object [] arg) in Microsoft. Data. SqlRemoteBlobs. Maintainer. Maintainer. MainInternal () at Microsoft. Data. SqlRemoteBlobs. Maintainer. Maintainer. Main (String [] args)
Causa
La prima eccezione si verifica perché lo strumento manutentore viene compilato tramite .NET Framework 2,0. Lo strumento non può caricare assembly basati su .NET Framework 4,0. L'eccezione di violazione di Access si verifica quando si tenta di inizializzare i provider di registrazione per Microsoft. Data. SqlRemoteBlobs. Maintainer. exe.
Risoluzione
La correzione di questo problema è disponibile nel download del pacchetto di funzionalità più recente per RBS. msi. Se si usa la soluzione alternativa suggerita, è possibile rimuovere o abilitare i tag relativi alla registrazione e mantenere il tag supportRuntime .Nota È possibile reinstallare RBS usando il nuovo file RBS. msi per applicare la correzione senza applicare l'aggiornamento.
Scaricare il pacchetto di funzionalità di Microsoft SQL server 2014 Service Pack 1 (SP1) scaricare il pacchetto di funzionalità di microsoft SQL Server 2012 Service Pack 3 (SP3)
Soluzione alternativa
Per risolvere il problema, aggiungere la configurazione aggiuntiva seguente al file di configurazione insieme al tag supportedRuntime . Questi tag disabilitano la funzionalità di registrazione per lo strumento manutentore perché l'eccezione viene generata durante l'inizializzazione dei provider di registrazione.
<startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> <RemoteBlobStorage> <Logging> <add key="ConsoleLog" value="0" /> <add key="FileLog" value="0" /> <add key="CircularLog" value="0" /> <add key="EventViewerLog" value="0" /> <add key="DatabaseTableLog" value="0" /> </Logging> </RemoteBlobStorage>
Stato
Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".