徵狀
假設您將自訂的遠端 BLOB 儲存體(RBS)提供者與執行時間 .NET Framework 4.0 搭配使用,以將 Microsoft SharePoint 2013 的 blob 儲存在遠端。 當您嘗試執行在內部呼叫 SqlRemoteBlobs 的垃圾清除時,會在垃圾收集期間收到下列錯誤訊息:
開始 Maintainer 工作。 啟動垃圾收集。 開始進行參照掃描。 <時間>:錯誤:0:::: AssemblyLoad:::讀取延伸檔 xxxx 時發生錯誤。RemoteBlobStoreProvider,<時間>:錯誤:0::: AssemblyLoad::: BadImageFormatException:此元件是由目前載入的執行時間更新,且無法載入。 (來自 HRESULT 的例外狀況:0x8013101B) <時間>: ERR:0::: AssemblyLoad:::在 NLoadFile (字串路徑、證據證據) <時間>:錯誤:0::: AssemblyLoad:::在中,LoadFile (字串路徑) <時間>:錯誤:0::: AssemblyLoad:::
Maintainer 工具是使用 .NET Framework 2.0 執行時間進行編譯,而且它無法載入以 .NET Framework 4.0 為 blob 和垃圾收集列舉的元件。 針對任何 .NET Framework 應用程式,您可以使用應用程式的設定檔案,並新增 supportedRuntime 標籤以使用較新版本的 .net framework。 Maintainer 元件的設定檔案是 SqlRemoteBlobs,如下列範例所示:)
<startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
如果您嘗試執行垃圾清除,SqlRemoteBlobs 會遇到違反存取的例外狀況,如下所示:
AccessViolationException:試圖讀取或寫入受保護的記憶體。 這通常表示其他記憶體已損毀。 在 AppendFormat (IFormatProvider 提供者、字串格式、物件 [] args) at SqlRemoteBlobs,InformationUtilities. InformationDetails ()在 microsoft. BlobStores. LogProvider ()上的(. CreateHeaderInformation () BlobStores (LogProvider ()。在 microsoft. LogLevel (() LogLevel ()。 BlobStores: DebugPrint (布林 initializeProviders)在 microsoft. BlobStores. DebugPrint、OperationType 階層、Int32 LogLevel、例外狀況、字串訊息、Object [] arg),請參閱(String [] args)] 中的(String [] args))。))中的 BlobStoreId (字串 [] 參數)
原因
第一個例外狀況是由使用 .NET Framework 2.0 編譯的 Maintainer 工具所產生。 此工具無法載入以 .NET Framework 4.0 為基礎的元件。 當您嘗試初始化 SqlRemoteBlobs 的記錄提供者時,會發生 [存取侵犯] 例外狀況。
解決方案
此問題的修正程式可在適用于 RBS 的最新功能套件下載中取得。 如果您使用的是建議的因應措施,您可以移除或啟用記錄相關標記,並保留 supportRuntime 標籤。注意: 您可以使用新的 RBS .msi 來套用修正,不需套用更新,即可重新安裝 RBS。
下載 MICROSOFT Sql server 2014 Service pack 1 (SP1)功能套件 下載 microsoft Sql Server 2012 Service PACK 3 (SP3)功能套件
因應措施
若要解決此問題,請將下列額外設定新增至設定檔,以及 supportedRuntime 標籤。 這些標記會停用 Maintainer 工具的記錄功能,因為在初始化記錄提供者期間會引發例外狀況。
<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>
狀態
Microsoft 已確認本篇文章<適用於>一節所列之 Microsoft 產品確實有上述問題。