L'application faisant référence à Microsoft.SqlServer.Smo nécessite l'inclusion d'assemblages supplémentaires sur la machine cible?

StackOverflow https://stackoverflow.com/questions/76933

  •  09-06-2019
  •  | 
  •  

Question

J'ai une petite application qui référence l'assembly Microsoft.SqlServer.Smo (je peux donc afficher à l'utilisateur une liste des serveurs et des bases de données auxquels ils peuvent se connecter).

Mon application a référencé à l'origine Microsoft.SqlServer.Smo et Microsoft.SqlServer.ConnectionInfo. Les choses ont fonctionné comme prévu sur ma boîte de dev.

Lorsque j'ai installé l'application sur une machine de test, j'ai reçu une System.IO.FileNotFoundException . Les détails du message comprenaient ce qui suit: Impossible de charger le fichier ou l'assembly Microsoft.SqlServer.SmoEnum

J'ai finalement résolu le problème en référençant les assemblages suivants en plus de ceux mentionnés ci-dessus:

  • Microsoft.SqlServer.SmoEnum
  • Microsoft.SqlServer.SqlEnum
  • Microsoft.SqlServer.BatchParser
  • Microsoft.SqlServer.Replication

Quelqu'un peut-il confirmer que j'ai effectivement besoin d'inclure chacun de ces assemblages supplémentaires dans mon application (et donc de les installer sur les ordinateurs de l'utilisateur) même si l'application est correctement construite sur ma boîte de développement sans qu'ils soient référencés?

Était-ce utile?

La solution

Oui, ils doivent être inclus. SQL Server est probablement installé sur la machine de développement, ce qui place ces assemblys dans le Global Assembly Cache. Chaque fois que vous générez, Visual Studio les extrait du GAC. Cela suppose également que le GAC, quel que soit l'ordinateur sur lequel il sera déployé, aura également ces fichiers. Sinon, il lève l'exception FileNotFound.

Autres conseils

Vous devez installer deux fichiers MSI sur une machine cible, à savoir:

1) SQLSysClrTypes.msi [celui-ci est nécessaire pour C # - > SMO GAC]

2) SharedManagementObjects.msi

Pour SQL Server 2014, vous pouvez télécharger ces ici .

De plus, vous devez vous assurer que la version est correcte. Ces deux fichiers peuvent être trouvés avec un peu de googler. De cette façon, vous ne copiez rien dans le répertoire local & amp; ils seront résolus par GAC.

Je sais que c'est une vieille question, mais les réponses n'étaient pas satisfaisantes.

Etant donné que JIT est lié à des assemblys externes au moment de l'exécution, il est impossible de répondre à cette question sans analyser votre code et voir ce que vous appelez, puis l'appel de ces appels, etc.

Si vous souhaitez analyser cela vous-même, votre meilleur choix serait de ne faire référence qu'à l'assemblage dont vous avez besoin, puis d'apprendre de ce qui s'est passé avec les exceptions et les exceptions internes.

Vous devez également vous demander pourquoi les quatre assemblées que vous avez mentionnées ne font pas partie du GAC. Il semble bien qu'ils devraient l'être.

Pour moi, cette réponse s’est avérée fausse. J'ai ajouté les références ci-dessus mais sans résolution. Finalement, j'ai trouvé que je n'avais besoin que de la référence:

Microsoft.SqlServer.Smo

... et la résolution suivante:

Je reçois un " Une tentative de chargement d'un programme avec un format incorrect a été effectuée" erreur sur un projet de réplication SQL Server

Pour résumer, je devais permettre à IIS 6 d'activer l'application 32 bits sur le pool d'applications IIS. C'est parce que j'avais Win 7 x64 mais une installation SQL x86. Dommage que le message d'erreur ne puisse pas être plus précis hein?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top