2010-07-30 1 views
0

Je travaille avec du code SQL 2005 CLR écrit en C#. Nous avons récemment modifié quelques-unes des fonctions pour autoriser les paramètres NULL. Nous l'avons fait en changeant les paramètres des types 'double' en 'SqlDecimal'. Nous avons testé avec succès les changements dans le développement et déplacé pour déployer les mises à jour sur le serveur de production. Nous utilisons un script SQL pour supprimer le code existant du serveur et créer ensuite l'assembly mis à jour et les objets associés. Le script SQL que nous avons utilisé dans le développement et le test a été déployé sur le serveur de production sans changement, mais quand nous courons là nous voyons une erreur:Pourquoi CREATE ASSEMBLY échoue-t-il avec l'erreur 'Impossible de résoudre le jeton'?

Creating CLR assemblies 
Msg 6218, Level 16, State 2, Line 2 
CREATE ASSEMBLY for assembly 'Company.Db.CLRStoredProcedures' failed because assembly 'Company.Db.CLRStoredProcedures' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message 
[ : StoredProcedures::clrproc_OSGBtoWGS84][mdToken=0x600002e][offset 0x0000002C] Unable to resolve token. 

Je googled cette erreur, mais ne semblent trouver quelque chose de sensible. Dans les changements que nous avons faits, il n'y avait pas de références nouvelles ou modifiées et donc je ne crois pas que ce soit lié à quelque chose qui manque sur le serveur, le code a déjà travaillé là-bas pendant un certain temps. Est-ce que quelqu'un sait ce qui se passe ici?

Répondre

0

Ce n'est pas une réponse à ma propre question, mais elle donne une idée de ce qui se passe et - très utilement - est un travail autour et donc cela pourrait aider quelqu'un dans une situation similaire.

Le script de déploiement auquel j'ai fait référence ci-dessus a été créé en scriptant les objets de base de données de développement. Au lieu de faire cela, j'ai découvert que si je:

  1. Démarrer le profileur SQL capturer les instructions SQL en cours d'exécution contre mon développement db.
  2. Utilisez la fonction 'Deploy' dans Visual Studio pour déployer le projet sur mon serveur SQL Server.
  3. Sélectionnez l'option de menu Fichier du profileur SQL -> Exporter -> Extraire les événements SQL Server -> Extraire les événements Transact-SQL pour enregistrer le fichier SQL de dépulpage capturé dans un fichier.
  4. Nettoyez un peu le fichier à l'aide d'un éditeur de texte.
  5. Exécutez le SQL capturé sur le serveur de production.

Ensuite, il fonctionne :-)

Donc, il doit y avoir une différence entre le script que je crée après que les objets ont été déployés par rapport au script de déploiement qui génère Visual Studio. Ceci ne permet pas d'expliquer le problème de 'Impossible de résoudre le jeton', mais cela nous donne peut-être une idée de ce qui se passe et, plus important encore, un moyen de contourner le problème.

Cela dit, je suis toujours désireux de comprendre ce que la « Impossible de résoudre jeton » erreur signifie ...

+0

Impossible de résoudre le jeton, ce qui signifie qu'il ne peut pas trouver de métadonnées. Je ne peux pas vous donner plus d'informations cependant, je débogue un problème similaire moi-même. –

+0

Je doute fortement qu'il y avait une différence dans le script et ce que vous avez capturé. Vous ne spécifiez pas non plus la version de Visual Studio que vous utilisez, et les moyens de déploiement/publication ont été modifiés plusieurs fois. Donc, pour vraiment comprendre cela, nous aurions besoin de voir le script de déploiement que vous utilisiez qui recevait l'erreur, ainsi que le script qui fonctionnait. Sinon, il n'y a pas assez d'informations ici pour continuer. –

+0

Cette question date de 5 ans et il en va de même pour mes archives techniques! Étant donné le temps qui s'est écoulé, je ne peux pas fournir de renseignements supplémentaires maintenant. – Elliveny

0

je courais dans une erreur de la même inexplicable « Impossible de résoudre jeton » pour une méthode était présent dans mon assemblée. Ce n'est qu'en changeant la plate-forme cible de .NET 4.5 en .NET 4.0 que j'ai pu le faire fonctionner. Une longue explication de la raison pour laquelle cela aurait pu fonctionner est in this msdn blog.

+2

Je ne pense pas que cette explication est pertinente pour votre problème puisque vous utilisez le CLR 4.0 dans les deux cas, mais c'était le principal problème dans ce blog. Avez-vous .NET 4.5 installé sur le serveur où l'assembly est déployé? Il est possible que dans votre cas, vous ayez développé sur une machine qui avait .NET 4.5 mais déployée sur une machine qui n'avait pas la mise à jour .NET 4.5 appliquée. –

+1

Ouais, vous avez raison, le serveur SQL n'a pas 4.5. Je l'ai installé et re-ciblé le projet pour .NET 4.5, publié sur SQL Server, et tout a fonctionné. Alors oui, ceci n'est pas lié au problème du PO. – Anssssss

Questions connexes