Sintomas
Suponha que você esteja usando um provedor de Remote BLOB Storage (RBS) personalizado juntamente com o tempo de execução do .NET Framework 4,0 para armazenar blobs remotamente para o Microsoft SharePoint 2013. Quando você tenta executar a limpeza de lixo que chama internamente Microsoft. Data. SqlRemoteBlobs. Maintainer. exe, você recebe a seguinte mensagem de erro durante a coleta de lixo:
Iniciando tarefas do mantenedor. Iniciando a coleta de lixo. Iniciando a verificação de referência. <> de tempo : err: 0::: AssemblyLoad::: ocorreu um erro ao ler o arquivo de extensão xxxx. RemoteBlobStoreProvider. dll. <de tempo>: err: 0::: AssemblyLoad::: System. BadImageFormatException: este assembly é criado por um tempo de execução mais recente do que o tempo de execução atualmente carregado e não pode ser carregado. (Exceção de HRESULT: 0x8013101B) <tempo>: err: 0::: AssemblyLoad:: em System. Reflection. assembly. nLoadFile (caminho da cadeia de caracteres, evidência de evidência) <tempo>: err: 0::: AssemblyLoad::: at System. Reflection. assembly. LoadFile (caminho da cadeia de caracteres) <tempo>: err: 0::: AssemblyLoad::: em Microsoft. Data. SqlRemoteBlobs. ProviderClass
A ferramenta mantenedor é compilada usando o .NET Framework 2,0 Runtime e não pode carregar assemblies baseados no .NET Framework 4,0 para a enumeração de BLOBs e coleta de lixo. Para qualquer aplicativo do .NET Framework, você pode usar o arquivo de configuração do aplicativo e adicionar a marca supportedRuntime para usar a versão mais recente do .NET Framework. O arquivo de configuração do componente mantenedor é Microsoft. Data. SqlRemoteBlobs. MaintainerConfig. xml, como no exemplo a seguir:
<startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
Se você tentar executar a limpeza de lixo, o Microsoft. Data. SqlRemoteBlobs. mantenedor encontrará uma exceção de violação de acesso da seguinte maneira:
System. AccessViolationException: tentou ler ou gravar memória protegida. Isso geralmente é uma indicação de que outra memória está corrompida. em System. Text. StringBuilder. AppendFormat (provedor IFormatProvider, formato de cadeia de caracteres, formato de objeto [] args) em Microsoft. Data. SqlRemoteBlobs. InformationUtilities. InformationDetails () em Microsoft. Data. BlobStores. LogProvider. CreateHeaderInformation () em Microsoft. Data. BlobStores. LogProvider. BlobStores () em Microsoft. Data... BlobStores. DebugPrint. Initialize (Boolean initializeProviders) em Microsoft. Data. BlobStores. DebugPrint. WriteLine (OperationType Operation, LogLevel Level, Int32 blobStoreId, exceção de exceção, mensagem de cadeia de caracteres, objeto [] ARG) em Microsoft. Data. SqlRemoteBlobs. Maintainer. Maintainer. MainInternal () em Microsoft. Data. SqlRemoteBlobs. mantenedor. Maintainer. Main (cadeia [] args
Causa
A primeira exceção ocorre porque a ferramenta de mantenedor é compilada usando o .NET Framework 2,0. A ferramenta não pode carregar assemblies baseados no .NET Framework 4,0. A exceção de violação de acesso ocorre quando você tenta inicializar os provedores de log para Microsoft. Data. SqlRemoteBlobs. Maintainer. exe.
Resolução
A correção para esse problema está disponível no download do Feature Pack mais recente para RBS. msi. Se você tiver usado a solução alternativa sugerida, poderá remover ou habilitar as marcas relacionadas ao log e manter a marca supportRuntime .Observação Você pode reinstalar o RBS usando o novo RBS. msi para aplicar a correção sem aplicar a atualização.
Baixar o pacote de recursos do Microsoft SQL server 2014 Service Pack 1 (SP1) baixar o pacote de recursos do microsoft SQL Server 2012 Service Pack 3 (SP3)
Solução alternativa
Para contornar esse problema, adicione a seguinte configuração adicional ao arquivo de configuração juntamente com a marca supportedRuntime . Essas marcas desabilitam a funcionalidade de log para a ferramenta de mantenedor porque a exceção está sendo lançada durante a inicialização dos provedores de log.
<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>
Status
A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".