Foutbericht wanneer u een routine CLR uitvoeren of een assembly in SQL Server: 'Assembly in winkel host heeft een andere handtekening dan assembly in GAC. (Uitzondering op HRESULT: 0x80131050) "

Van toepassing: SQL Server 2012 EnterpriseSQL Server 2012 StandardSQL Server 2012 Developer

Symptomen


Houd rekening met de volgende scenario's.

Scenario 1

U maakt een common language runtime (CLR) routine die verwijst naar een Microsoft .NET Framework-assembly. De .NET Framework-assembly wordt niet beschreven in Knowledge Base-artikel 922672. Vervolgens installeert u .NET Framework 3.5 of een hotfix op basis van .NET Framework 2.0.

Scenario 2

Maakt u een assembly en registreert u de assembly in een Microsoft SQL Server-database. Vervolgens installeert u een andere versie van de assembly in de globale Assembly-Cache (GAC).

Wanneer u de routine CLR uitvoeren of de algemene vergadering van een van deze scenario's in SQL Server, wordt een foutbericht van de volgende strekking:

Server: Msg 6522, niveau 16, staat 2, regel 1
Een .NET Framework-fout is opgetreden tijdens de uitvoering van door de gebruiker gedefinieerde routine of statistische getsid:

System.IO.FileLoadException: Kan niet laden, bestand of assembly ' System.DirectoryServices, versie 2.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a =' of een van de afhankelijkheden. Assembly in winkel host heeft een andere handtekening dan assembly in GAC. (Uitzondering op HRESULT: 0x80131050)

System.IO.FileLoadException:

Oorzaak


Als de CLR wordt een assembly geladen, verifieert de CLR dat dezelfde assembly in de GAC is. Als u dezelfde assembly in de GAC, verifieert de CLR dat de Module versie-id's (MVIDs) van deze assembly's overeenkomen. Als de MVIDs van deze assembly's niet overeenkomen, wordt het foutbericht weergegeven dat in de sectie 'Symptomen' wordt vermeld.

Als u een assembly is gecompileerd, verandert de MVID van de assembly. Daarom als u .NET Framework bijgewerkt, hebben de .NET Framework-assembly's verschillende MVIDs omdat deze assembly's opnieuw worden gecompileerd. Als u uw eigen assemblage bijwerkt, wordt bovendien de assembly gecompileerd. De assembly heeft dus ook een verschillende MVID.

Tijdelijke oplossing


Tijdelijke oplossing 1

Omzeil scenario 1 in de sectie 'Symptomen', moet u de .NET Framework-assemblages in SQL Server handmatig bijwerken. Hiertoe gebruikt u de instructie ALTER ASSEMBLY om te verwijzen naar de nieuwe versie van het .NET Framework-assembly in de volgende map:
%Windir%\Microsoft.NET\Framework\Version
Opmerking Versie staat de versie van .NET Framework die u geïnstalleerd of bijgewerkt.

Tijdelijke oplossing 2

Omzeil scenario 2 in de sectie 'Symptomen', gebruikt u de instructie ALTER ASSEMBLY voor het bijwerken van de assembly in de database.

Als het probleem blijft optreden nadat u dit hebt gedaan, de assembly te verwijderen uit de database en vervolgens de nieuwe versie van de assemblage registreren in de database.

Status


Microsoft heeft bevestigd dat dit probleem kan optreden in de Microsoft-producten die worden vermeld in de sectie 'Van toepassing op'.

Meer informatie


Het gebruik van .NET Framework-assemblages die niet zijn beschreven in Knowledge Base-artikel 922672 wordt niet aanbevolen. Knowledge Base-artikel 922672 vindt de assembly's die worden getest in de omgeving van CLR van SQL Server worden gehost.

Voor meer informatie klikt u op het volgende artikelnummer om het artikel in de Microsoft Knowledge Base weer te geven:
922672 ondersteuning van beleid voor niet-geteste .NET Framework-assembly's in de omgeving van CLR van SQL Server worden gehost

Beschrijving van de CLR-routines

CLR-routines zijn onder andere de volgende objecten die worden geïmplementeerd met behulp van SQL Server-integratie met het .NET Framework CLR:
  • Scalaire waarden door de gebruiker gedefinieerde functies (UDF's scalaire)
  • Tabelwaarden door de gebruiker gedefinieerde functies (TVFs)
  • Door de gebruiker gedefinieerde procedures (UDPs)
  • Door de gebruiker gedefinieerde triggers
  • Door de gebruiker gedefinieerde gegevenstypen
  • Door de gebruiker gedefinieerde aggregaten

Assembly's wilt bijwerken nadat u .NET Framework 3.5 installeren

Nadat u .NET Framework 3.5 installeert, moet u de instructie ALTER ASSEMBLY voor het bijwerken van de volgende verzamelingen:
  • 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
Deze assembly's in de volgende map:
%Windir%\Microsoft.NET\Framework\v2.0.50727

De gegevens van de door de gebruiker gedefinieerde gegevenstypen behouden nadat u een assembly weghalen

Als u een assembly die een door de gebruiker gedefinieerde gegevenstype van SQL Server gebruikt, kunt u een van de volgende methoden om de gegevens te bewaren.

Stel dat het volgende is het scenario:
  • U maakt een assembly met de naam
    MyAssembly.dll.
  • De assembly-verwijzingen MyAssembly de
    System.DirectoryServices.dll assemblage.
  • Hebt u een door de gebruiker gedefinieerde gegevenstype met de naam
    MyDateTime.
  • De assembly MyAssembly.dllmaakt gebruik van het gegevenstype MyDateTime .
  • Maakt u een tabel met de naam MyTable is.
  • De tabel MijnTabel bevat de gegevens van het type MyDateTime .

Methode 1: Gebruik het hulpprogramma bcp.exe

  1. Gebruik het hulpprogramma Bcp.exe samen met de schakeloptie -n de gegevens uit de tabel MijnTabel kopiëren naar een bestand. Bijvoorbeeld de volgende opdracht uitvoeren vanaf een opdrachtprompt:
    bcp MyDatabase.dbo.MyTable out C:\MyFile.bcp -n –SSQLServerName  -T
  2. Voer de volgende stappen uit in SQL Server Management Studio:
    1. De tabel MijnTabel neerzetten.
    2. Het gegevenstype MyDateTime neerzetten.
    3. De assembly System.DirectoryServices.dll neerzetten.
    4. De assembly MyAssembly neerzetten.
  3. Voer de volgende stappen uit in SQL Server Management Studio:
    1. De assembly System.DirectoryServices.dll registreren.
    2. De assembly MyAssembly registreren.
    3. Het gegevenstype MyDateTime maken.
    4. Een nieuwe tabel maken die dezelfde structuur als de tabel MijnTabel tabel.
  4. Gebruik het hulpprogramma Bcp.exe samen met de schakeloptie -n om de gegevens in de tabel MijnTabel importeren uit het bestand. Bijvoorbeeld de volgende opdracht uitvoeren vanaf een opdrachtprompt:
    bcp MyDatabase.dbo.MyTable in C:\MyFile.bcp -n –SSQLServerName  -T

Methode 2: Gebruik de INSERT... SELECT-instructie

Stel dat het gegevenstype MyDateTime 9 bytes in de opslag beslaat.
  1. Maak een nieuwe tabel met een kolom met het gegevenstype VARBINARY(9) door de volgende instructie uit te voeren in SQL Server Management Studio:
    CREATE TABLE TempTable (c1 VARBINARY(9))
  2. Voer de volgende invoegen... Selecteer instructie voor het vullen van de TempTable-tabel:
    INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable
  3. Voer de volgende stappen uit in SQL Server Management Studio:
    1. De tabel MijnTabel neerzetten.
    2. Het gegevenstype MyDateTime neerzetten.
    3. De assembly System.DirectoryServices.dll neerzetten.
    4. De assembly MyAssembly neerzetten.
  4. Voer de volgende stappen uit in SQL Server Management Studio:
    1. De assembly System.DirectoryServices.dll registreren.
    2. De assembly MyAssembly registreren.
    3. Het gegevenstype MyDateTime maken.
    4. Een nieuwe tabel maken die dezelfde structuur als de tabel MijnTabel tabel.
  5. Voer de volgende invoegen... Selecteer instructie voor het vullen van de tabel MijnTabel:
    INSERT INTO MyTable SELECT c1 FROM TempTable

Referenties


Ga naar de volgende website van Microsoft Developer Network (MSDN) voor meer informatie over de assemblyversie:
Ga naar de volgende MSDN-website voor meer informatie over het bijwerken van een assembly:
Ga naar de volgende MSDN-website voor meer informatie over het verwijderen van een assembly:
Ga naar de volgende MSDN-website voor meer informatie over het registreren van een assembly in SQL Server 2005-database:
Ga naar de volgende MSDN-website voor meer informatie over het hulpprogramma voor Bcp.exe: