Applies ToSQL Server 2012 Enterprise SQL Server 2012 Developer SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use)

徵狀

假設您將自訂的遠端 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 產品確實有上述問題。

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。