Comment puis-je résoudre ce conflit DLL SQL / C #

J'ai développé une application en utilisant C # (Visual Studio) qui fonctionne sans problème sur mon PC de développement Windows 10. Toutefois, lorsque je copy l'application sur son ordinateur cible et l'exécute (Server 2012 R2), une exception m'informe qu'un file ou un assembly ne peut pas être chargé: Microsoft.SqlServer.ConnectionInfo, Version = 13.100.0.0.

Si je copy la version 13 de la DLL dans le directory du programme du PC cible et exécute l'application, je reçois alors une exception m'informant qu'il ne peut pas find la version 14 de la DLL. Copie la version 14 à la cible puis donnez-moi l'exception originale, et ainsi de suite.

J'ai des references à toutes les DLL requirejses dans l'application, à savoir:

  • Microsoft.SqlServer.ConnectionInfo.dll (celui qui me donne le problème). Microsoft.SqlServer.Management.Sdk.Sfc.dll Microsoft.SqlServer.Smo.dll Microsoft.SqlServer.SqlClrProvider.dll Microsoft.SqlServer.SqlEnum.dll Microsoft.Web.Administration.dll

Tous sont définis comme: version spécifique = false.

Tous les frameworks nécessaires sont installés sur le server. En outre, les éléments suivants sont également installés sur le server avec lequel le programme interagit:

• Fusion froide

SQL Server 2012 (et 2008 mais cette instance n'est pas utilisée par le programme)

Le file .exe est installé via un programme d'installation et cette installation inclut les DLL nécessaires installées dans le même directory que l'exe.

Des permissions complètes sont disponibles sur le directory et le programme lui-même a le niveau d'access le plus élevé.

La string de connection est sélectionnable par l'user et la valeur par défaut est la bonne, selon l'endroit où le programme est installé.

Est-ce que quelqu'un a des idées qui peuvent m'aider à résoudre ce conflit?

En remerciant tout le monde à l'avance.

Cordialement, Ken.

INFORMATION ADDITIONNELLE

Le numéro de version de Microsoft.SqlServer.ConnectionInfo.dll affiché dans Visual Studio est 13.100.0.0. J'ai copié la DLL du path indiqué dans les propriétés, dans le directory du programme. Devine quoi? Quand j'ai couru le programme une exception m'a informé qu'il ne pouvait pas find la version 14.100.0.0!

C'est la version de la même DLL que celle affichée sur la page properties du file: 13.0.16106.4.

SMO est toujours installé dans le GAC, peu importe les files que vous copyz dans votre dossier / bin. Les assemblys GAC'd remplacent ceux locaux.

Vous avez référencé la version SQL 2016 de SMO. Vous devez donc soit l'installer sur votre server cible, soit build votre projet en fonction de la version de SMO déjà présente sur le server cible.

Voir https://docs.microsoft.com/en-us/sql/relational-databases/server-management-objects-smo/files-and-version-numbers

Notez qu'en raison des problèmes de chargement et de deployment de SMO et du style d'API très ancien de SMO, il est souvent préférable que votre application exécute l'administration de SQL Server avec TSQL et System.Data.SqlClient.

[RÉSOLU]

Dumbassary était sur le sharepoint

J'ai supprimé toutes les references du projet Visual Studio, les ai rajoutées et cela a fonctionné.

Le problème a été provoqué par une reference de DLL qui pointait vers le directory d'installation du programme et non vers C: \ Program Files (x86) \ Microsoft SQL Server \ 130 \ SDK \ Assemblies. Comme la boîte properties n'a pas été entièrement développée, je n'ai pas pu le remarquer.

J'espère que quelqu'un d'autre peut bénéficier de mon expérience.

Merci pour ton commentaire David.