Message d'erreur lorsque vous exécutez une routine CLR ou que vous utilisez un assembly dans SQL Server: « Assembly dans le magasin hôte a une même signature que l'assembly dans le GAC. (Exception de HRESULT : 0x80131050) "

Traductions disponibles Traductions disponibles
Numéro d'article: 949080 - Voir les produits auxquels s'applique cet article
Agrandir tout | Réduire tout

Sommaire

Symptômes

Examinons les scénarios suivants.

Scénario 1

Vous créez une routine courante au language runtime (CLR) qui fait référence à un assembly Microsoft.NET Framework. L'assembly.NET Framework n'est pas documentée dans Article de la Base de connaissances 922672. Puis, vous installez le 3.5 de.NET Framework ou un correctif basée sur.NET Framework 2.0.

Scénario 2

Création d'un assembly, et puis vous enregistrez l'assembly dans une base de données Microsoft SQL Server. Ensuite, vous installez une version différente de l'assembly dans le Global Assembly Cache (GAC).

Lorsque vous exécutez la routine CLR ou utilisez l'assembly à partir de ces deux scénarios dans SQL Server, vous recevez un message d'erreur semblable au suivant :

Serveur: Msg 6522, niveau 16, état 2, ligne 1
Un.NET Framework une erreur s'est produite pendant l'exécution de la routine définis par l'utilisateur ou d'un agrégat « getsid » :

System.IO.FileLoadException : Impossible de charger fichier ou assembly ' System.DirectoryServices, Version = 2.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a' ou l'un de ses dépendances. Assembly dans l'hôte banque d'informations a une même signature que l'assembly dans le GAC. (Exception de HRESULT : 0x80131050)

System.IO.FileLoadException :

Cause

Lorsque le CLR charge un assembly, le CLR vérifie que le même assembly se trouve dans le GAC. Si le même assembly se trouve dans le GAC, le CLR vérifie qui mettre en correspondance les ID de Version du Module (MVIDs) de ces assemblys. Si les MVIDs de ceux-ci les assemblys ne correspondent pas, vous recevez le message d'erreur du message que le Mentionne la section « Symptômes ».

Lorsqu'un assembly est recompilé, le MVID de la modifications de l'assembly. Par conséquent, si vous mettez à jour le.NET Framework, les assemblys.NET Framework ont différents MVIDs dans la mesure où ces assemblys sont recompilés. En outre, If vous mettez à jour votre propre assembly, l'assembly est recompilé. Par conséquent, l'assembly possède également un autre MVID.

Contournement

Solution de contournement 1

Pour contourner le scénario 1 dans la section « Symptômes », vous devez mettre à jour manuellement les assemblys.NET Framework dans SQL Server. Pour ce faire, utilisez l'instruction ALTER ASSEMBLY pour point vers le nouveau version de l'assembly.NET Framework dans le dossier suivant :
%Windir%\Microsoft.NET\Framework\Version
RemarqueVersion représente la version de la.NET Framework que vous avez installé ou mis à jour.

Solution de contournement 2

Pour contourner de scénario 2 pouces les section « Symptômes » de section, utilisez l'instruction ALTER ASSEMBLY pour mettre à jour de l'assembly dans la base de données.

Si le problème persiste Après cela, vous devez supprimer l'assembly de la base de données, puis inscrire le nouvelle version de l'assembly dans la base de données.

Statut

Microsoft a confirmé qu'il s'agit d'un problème dans les produits Microsoft répertoriés dans la section « S'applique à ».

Plus d'informations

Nous vous déconseillons d'utiliser des assemblys.NET Framework qui ne sont pas documentés dans l'article 922672 de la Base de connaissances. L'article 922672 de la Base de connaissances répertorie les assemblys qui sont testés dans l'environnement hébergé SQL Server CLR.

Pour plus d'informations, cliquez sur le numéro ci-dessous pour afficher l'article correspondant dans la Base de connaissances Microsoft :
922672 Politique de support pour les assemblys.NET Framework non testés dans l'environnement hébergé SQL Server CLR

Description de routines CLR

Routines CLR inclure les objets suivants sont implémentés à l'aide Intégration de SQL Server avec le CLR de.NET Framework :
  • Fonctions de valeur scalaire définies par l'utilisateur (scalaire UDF)
  • Valeur de table fonctions définies par l'utilisateur (TVF)
  • Procédures définies par l'utilisateur (UDPs)
  • Déclencheurs définis par l'utilisateur
  • Types de données définis par l'utilisateur
  • Agrégats définis par l'utilisateur

Assemblys pour mettre à jour une fois que vous installez.NET Framework 3.5

Après avoir installé le 3.5 de.NET Framework, vous devez utiliser le ALTER ASSEMBLY instruction pour mettre à jour les assemblys suivants :
  • 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
Ces assemblys se trouvent dans le dossier suivant :
%Windir%\Microsoft.NET\Framework\v2.0.50727

Comment faire pour conserver les données à partir de types de données définis par l'utilisateur une fois que vous touchez un assembly

Si vous déposez un assembly qui utilise un type de données défini par l'utilisateur à partir de SQL Server, vous pouvez utiliser une des méthodes suivantes pour conserver les données.

Supposons que le texte suivant est le scénario :
  • Création d'un assembly dont le nom est MyAssembly.dll.
  • Les références d'assembly MyAssembly le Assemblage System.DirectoryServices.dll .
  • Vous avez un type de données défini par l'utilisateur dont le nom est MyDateTime.
  • Le type de données MyDateTime utilise le MyAssembly.dll assembly.
  • Vous créez une table dont le nom est MyTable.
  • La table MyTable contienne les données des données MyDateTime type.

Méthode 1: Utilisez l'utilitaire bcp.exe

  1. Permet de copier l'utilitaire Bcp.exe avec le commutateur ? n les données à partir de la table MyTable dans un fichier. Par exemple, exécuter le commande suivante à une invite de commande :
    bcp MyDatabase.dbo.MyTable out C:\MyFile.bcp -n ?SSQLServerName  -T
  2. Dans SQL Server Management Studio, procédez comme suit :
    1. Supprimer la table MyTable.
    2. Supprimer le type de données MyDateTime .
    3. Déposez le System.DirectoryServices.dll assembly.
    4. Supprimer l'assembly MyAssembly .
  3. Dans SQL Server Management Studio, procédez comme suit :
    1. Inscrire le System.DirectoryServices.dll assembly.
    2. Enregistrez l'assembly MyAssembly .
    3. Créer le type de données MyDateTime .
    4. Créer une nouvelle table qui possède la même structure de table en tant que la table MyTable.
  4. Utilisez l'utilitaire Bcp.exe avec le commutateur ? n à importer les données à partir du fichier dans la table MyTable. Par exemple, exécuter le commande suivante à une invite de commande :
    bcp MyDatabase.dbo.MyTable in C:\MyFile.bcp -n ?SSQLServerName  -T

Méthode 2: Utiliser l'instruction INSERT... Instruction SELECT

Supposons que le type de données MyDateTime occupe 9 octets de stockage.
  1. Dans SQL Server Management Studio, créez une nouvelle table qui contient une colonne du type de données VARBINARY(9) en exécutant la commande suivante instruction :
    CREATE TABLE TempTable (c1 VARBINARY(9))
  2. Exécutez la commande suivante INSERT... Sélectionnez instruction pour remplir le Tableau de tables temporaires :
    INSERT INTO TempTable SELECT CAST(c1 as VARBINARY(9)) FROM MyTable
  3. Dans SQL Server Management Studio, procédez comme suit :
    1. Supprimer la table MyTable.
    2. Supprimer le type de données MyDateTime .
    3. Déposez le System.DirectoryServices.dll assembly.
    4. Supprimer l'assembly MyAssembly .
  4. Dans SQL Server Management Studio, procédez comme suit :
    1. Inscrire le System.DirectoryServices.dll assembly.
    2. Enregistrez l'assembly MyAssembly .
    3. Créer le type de données MyDateTime .
    4. Créer une nouvelle table qui possède la même structure de table en tant que la table MyTable.
  5. Exécutez la commande suivante INSERT... Sélectionnez instruction pour remplir le Table MyTable :
    INSERT INTO MyTable SELECT c1 FROM TempTable

Références

Pour plus d'informations sur la version d'assembly, visitez le site Web de Microsoft Developer Network (MSDN) suivant :
.aspx http://msdn2.Microsoft.com/en-us/library/51ket42z (VS.80)
Pour plus d'informations sur la façon de mettre à jour un assembly, consultez le site Web MSDN suivant site :
http://msdn2.Microsoft.com/en-us/library/ms186711.aspx
Pour plus d'informations sur le déplacement d'un assembly, visitez le site Web MSDN suivant site :
http://msdn2.Microsoft.com/en-us/library/ms177514.aspx
Pour plus d'informations sur la façon d'inscrire un assembly dans une base de données SQL Server 2005, visitez le site Web MSDN suivant :
http://msdn2.Microsoft.com/en-us/library/ms189524.aspx
Pour plus d'informations sur l'utilitaire Bcp.exe, visitez le site Web MSDN suivant :
http://msdn2.Microsoft.com/en-us/library/ms162802.aspx

Propriétés

Numéro d'article: 949080 - Dernière mise à jour: lundi 7 janvier 2013 - Version: 1.0
Les informations contenues dans cet article s'appliquent au(x) produit(s) suivant(s):
  • 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
Mots-clés : 
kbexpertiseadvanced kbtshoot kbprb kbmt KB949080 KbMtfr
Traduction automatique
IMPORTANT : Cet article est issu du système de traduction automatique mis au point par Microsoft (http://support.microsoft.com/gp/mtdetails). Un certain nombre d?articles obtenus par traduction automatique sont en effet mis à votre disposition en complément des articles traduits en langue française par des traducteurs professionnels. Cela vous permet d?avoir accès, dans votre propre langue, à l?ensemble des articles de la base de connaissances rédigés originellement en langue anglaise. Les articles traduits automatiquement ne sont pas toujours parfaits et peuvent comporter des erreurs de vocabulaire, de syntaxe ou de grammaire (probablement semblables aux erreurs que ferait une personne étrangère s?exprimant dans votre langue !). Néanmoins, mis à part ces imperfections, ces articles devraient suffire à vous orienter et à vous aider à résoudre votre problème. Microsoft s?efforce aussi continuellement de faire évoluer son système de traduction automatique.
La version anglaise de cet article est la suivante: 949080
L'INFORMATION CONTENUE DANS CE DOCUMENT EST FOURNIE PAR MICROSOFT SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE. L'UTILISATEUR ASSUME LE RISQUE DE L'UTILISATION DU CONTENU DE CE DOCUMENT. CE DOCUMENT NE PEUT ETRE REVENDU OU CEDE EN ECHANGE D'UN QUELCONQUE PROFIT.

Envoyer des commentaires

 

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