當您執行的 CLR 常式,或使用 SQL Server 中的組件時,出現錯誤訊息: 「 主機存放區中的組件具有不同的簽章比組件 GAC 中。(例外狀況於 HRESULT: 0x80131050)"

文章翻譯 文章翻譯
文章編號: 949080 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

徵狀

請考慮下列案例。

案例 1

您可以建立會參考一個通用語言執行階段 (CLR) 常式Microsoft.NET Framework 組件中。.NET Framework 組件並未記載在知識庫文件 922672。然後,您可以安裝.NET Framework 3.5 或在.NET Framework 2.0 架構 hotfix。

案例 2

您可以建立一個組件,然後再您 Microsoft SQL Server 資料庫中,會在登錄組件時。然後,您安裝不同版本的組件在全域組件快取 (GAC) 中。

當您執行的 CLR 常式,或用於 SQL Server 中的其中一種情況的組件時,您會收到類似下列的錯誤訊息:

伺服器: 訊息 6522,層次 16,狀態 1,行 1
.NET Framework使用者自訂常式或彙總的執行期間發生錯誤' getsid':

System.IO.FileLoadException: 無法載入檔案或組件' 徵,版本 2.0.0.0,文化特性的 = = 中性,PublicKeyToken = b03f5f7f11d50a3a' 或其中一個相依性。在主應用程式的組件儲存區會有不同的簽章比組件在 GAC 中。(例外狀況於 HRESULT:) 0x80131050

System.IO.FileLoadException:

發生的原因

當 CLR 載入組件時,CLR 會確認要執行的相同組件是在 GAC 中。如果相同的組件在 GAC 中,則 CLR 會驗證,這些組件模組版本識別碼 (MVIDs) 比對。如果其中 MVIDs組件不相符,就會收到錯誤訊息,「 徵狀 」 一節所提及。

當重新編譯組件時的 MVID組件的變更。因此,如果您要更新的.NET Framework,.NET Framework 組件有不同的 MVIDs因為這些組件會重新編譯。此外,如果您更新您自己的組件、 組件重新編譯。因此,組件也有不同MVID。

其他可行方案

因應措施 1

若要解決案例 1 「 徵狀 」 一節中,您必須手動更新 SQL Server 中的.NET Framework 組件。若要這樣做,請使用變更組件陳述式,點至新在.NET Framework 組件版本下列資料夾:
%Windir%\Microsoft.NET\Framework\版本
附註版本 表示.NET Framework 版本,您安裝或更新。

因應措施 2

如果要解決的案例2 英吋「 徵狀 」 區段中,使用修改的組件陳述式更新中的組件資料庫中。

如果問題仍然存在執行這項操作之後,組件從卸除資料庫,然後再註冊新版的組件在資料庫中。

狀況說明

Microsoft已確認這是所列出的 Microsoft 產品中的問題在 「 適用於"] 區段中。

其他相關資訊

我們不建議您使用未記載知識庫文件 922672 中的.NET Framework 組件。知識庫文章 922672 列出 SQL Server CLR 裝載環境中測試的組件。

如需詳細資訊,按一下下面的文件編號,檢視 Microsoft 知識庫中的文件:
922672 支援的 SQL Server CLR 裝載環境中未經測試的.NET Framework 組件的原則

CLR 常式的描述

CLR 常式包含藉由實作下列物件與.NET Framework CLR 的 SQL Server 的整合:
  • 純量值使用者定義函式 (純量Udf)
  • 資料表值使用者定義函式 (Tvf)
  • 使用者定義的程序 (UDPs)
  • 使用者自訂觸發程序
  • 使用者定義資料型別
  • 使用者定義彙總

若要更新為.NET Framework 3.5 安裝之後的組件

.NET Framework 3.5 安裝之後,您必須使用更改組件陳述式來更新下列組件:
  • Accessibility.dll
  • AspNetMMCExt.dll
  • Cscompmgd.dll
  • IEExecRemote.dll
  • IEHost.dll
  • IIEHost.dll
  • Microsoft.Build.Conversion.dll
  • Microsoft.Build.Engine.dll
  • Microsoft.Build.Framework.dll
  • Microsoft.Build.Tasks.dll
  • Microsoft.Build.Utilities.dll
  • Microsoft.CompactFramework.Build.Tasks.dll
  • Microsoft.JScript.dll
  • Microsoft.VisualBasic.Vsa.dll
  • Microsoft.Vsa.dll
  • Microsoft.Vsa.Vb.CodeDOMProcessor.dll
  • Microsoft_VsaVb.dll
  • Sysglobl.dll
  • System.Configuration.Install.dll
  • System.Design.dll
  • System.DirectoryServices.dll
  • System.DirectoryServices.Protocols.dll
  • System.Drawing.dll
  • System.Drawing.Design.dll
  • System.EnterpriseServices.dll
  • System.Management.dll
  • System.Messaging.dll
  • System.Runtime.Serialization.Formatters.Soap.dll
  • System.ServiceProcess.dll
  • System.Web.dll
  • System.Web.Mobile.dll
  • System.Web.RegularExpressions.dll
這些組件位於下列資料夾:
%Windir%\Microsoft.NET\Framework\v2.0.50727

如何保留使用者定義資料型別中的資料之後您拖放組件

如果卸除的 SQL Server 的使用者自訂資料型別會使用組件,您可以使用下列方法之一,以保留資料。

假設下列案例:
  • 您可以建立其名稱的組件MyAssembly.dll
  • MyAssembly的組件參考System.DirectoryServices.dll組件。
  • 您有使用者自訂資料型別的名稱為MyDateTime
  • MyDateTime資料型別使用MyAssembly.dll組件。
  • 您可以建立其名稱為 MyTable 的表格。
  • MyTable 表格資料表包含的資料的MyDateTime資料型別。

方法 1: 使用 bcp.exe 公用程式

  1. 使用 Bcp.exe 公用程式加上– n參數複製我的表格資料表的資料到檔案。比方說,執行在命令提示字元中的下列命令:
    bcp MyDatabase.dbo.MyTable out C:\MyFile.bcp -n –SSQLServerName  -T
  2. 在SQL Server Management Studio,請遵循下列步驟:
    1. 卸除 MyTable 表格資料表。
    2. 卸除的MyDateTime資料型別。
    3. 卸除System.DirectoryServices.dll組件。
    4. 卸除MyAssembly組件。
  3. 在SQL Server Management Studio,請遵循下列步驟:
    1. 暫存器System.DirectoryServices.dll組件。
    2. 註冊MyAssembly組件。
    3. 建立的MyDateTime資料型別。
    4. 建立新的資料表具有與相同的資料表結構MyTable 表格資料表。
  4. 使用 Bcp.exe 公用程式加上– n參數從檔案匯入資料到我的表格資料表。比方說,執行在命令提示字元中的下列命令:
    bcp MyDatabase.dbo.MyTable in C:\MyFile.bcp -n –SSQLServerName  -T

方法 2: 使用 [插入]...SELECT 陳述式

假設的MyDateTime資料型別儲存區中佔據 9 個位元組。
  1. 在 SQL Server Management Studio,建立新的資料表,包含VARBINARY(9)資料型別的資料行,藉由執行下列陳述式:
    CREATE TABLE TempTable (c1 VARBINARY(9))
  2. 執行下列命令插入...選取 [陳述式,以填入TempTable 的資料表:
    INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable
  3. 在SQL Server Management Studio,請遵循下列步驟:
    1. 卸除 MyTable 表格資料表。
    2. 卸除的MyDateTime資料型別。
    3. 卸除System.DirectoryServices.dll組件。
    4. 卸除MyAssembly組件。
  4. 在SQL Server Management Studio,請遵循下列步驟:
    1. 暫存器System.DirectoryServices.dll組件。
    2. 註冊MyAssembly組件。
    3. 建立的MyDateTime資料型別。
    4. 建立新的資料表具有與相同的資料表結構MyTable 表格資料表。
  5. 執行下列命令插入...選取 [陳述式,以填入MyTable 表格資料表:
    INSERT INTO MyTable SELECT c1 FROM TempTable

?考

如需有關組件版本的詳細資訊,請造訪下列的 Microsoft 開發人員網路 (MSDN) 網站:
http://msdn2.microsoft.com/en-us/library/51ket42z (VS.80).aspx
針對有關如何更新組件的詳細資訊,請造訪下列 MSDN 網站站台:
http://msdn2.microsoft.com/en-us/library/ms186711.aspx
針對有關如何在拖放組件的詳細資訊,請造訪下列 MSDN 網站站台:
http://msdn2.microsoft.com/en-us/library/ms177514.aspx
針對進一步瞭解如何在 SQL Server 2005 資料庫中,註冊組件請造訪下列 MSDN 網站:
http://msdn2.microsoft.com/en-us/library/ms189524.aspx
針對Bcp.exe 公用程式,需詳細資訊,請造訪下列 MSDN 網站:
http://msdn2.microsoft.com/en-us/library/ms162802.aspx

屬性

文章編號: 949080 - 上次校閱: 2013年1月7日 - 版次: 1.0
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2012 Enterprise
  • Microsoft SQL Server 2012 Standard
  • Microsoft SQL Server 2012 Developer
  • Microsoft SQL Server 2008 R2 Enterprise
  • Microsoft SQL Server 2008 R2 Developer
  • Microsoft SQL Server 2008 R2 Datacenter
  • Microsoft SQL Server 2008 R2 Workgroup
  • Microsoft SQL Server 2008 R2 Standard
  • Microsoft SQL Server 2008 Standard
  • Microsoft SQL Server 2008 Workgroup
  • Microsoft SQL Server 2008 Developer
  • Microsoft SQL Server 2008 Enterprise
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
關鍵字:?
kbexpertiseadvanced kbtshoot kbprb kbmt KB949080 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:949080
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com