web-dev-qa-db-fra.com

La version hébergée de l'agent VS2017 master.dacpac n'existe pas

Ma solution créée avec VS2017 Professional contient un projet de base de données SQL Server qui référence la base de données master. Lorsque j'utilise l'agent Hosted VS2017 pour créer ma solution dans Visual Studio Team Services, j'obtiens les erreurs ci-dessous:

2017-07-14T12: 44: 17.8387743Z ## [erreur] C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools. Schema.SqlTasks.targets (559,5): Erreur SQL72027: fichier "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\110\SqlSchemas\master.dacpac "n'existe pas. 2017-07-14T12: 44: 17.8397816ZC:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\VisualStudio\v15.0\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets ( 559,5): Erreur de génération SQL72027: Fichier "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\110\SqlSchemas\master.dacpac" n'existe pas. [d:\a\3\s\Main\ItAsset.Database\ItAsset.Database.sqlproj]

Comment puis-je résoudre ce problème et obtenir ma solution pour construire dans VSTS?

22
mheptinstall

Je viens de me faire mordre par cela dans une situation multi-développeurs. Cela semble se produire dans les projets VS2017 SSDT où le développeur qui a archivé le code avait initialement son installation de Visual Studio dans un chemin différent de vous, ou une autre instance de Visual Studio. Par exemple, si le développeur A est installé par défaut sur C:\mais que le développeur B a installé son VS2017 sur le lecteur E: \, celui qui crée la référence à Master fonctionnera, l'autre ne trouvera pas le fichier dacpac.

En regardant dans le fichier .sqlproj, vous trouverez probablement cette référence à la base de données Master:

 <ArtifactReference Include="C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">
  <HintPath>$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac</HintPath>

Noter la <HintPath> est correct, mais le Include=" est un chemin codé en dur. Il semble que le chemin de l'indice ne soit pas suivi comme il devrait normalement l'être. Pour résoudre votre problème, essayez de copier le contenu de l'élément HintPath dans l'attribut Include. Laissez le HintPath tel quel.

<ArtifactReference Include="$(DacPacRootPath)\Extensions\Microsoft\SQLDB\Extensions\SqlServer\130\SqlSchemas\master.dacpac">
45
Larry Smith

Il s'agit d'un bogue dans SSDT pour Visual Studio 2017.

La solution consiste à modifier manuellement le ou les fichiers de projet en remplaçant le chemin d'accès complet par la variable $ (DacPacRootPath). Ou, vous pouvez utiliser SSDT pour Visual Studio 2015.

https://feedback.Azure.com/forums/908035-sql-server/suggestions/32897047-visual-studio-2017-ssdt-adds-hardcoded-master-dacp#comments

Mise à jour du 12/12/2019 - Ce bogue a été corrigé dans Visual Studio 2019 et Visual Studio 2017 version 15.9.13. Voir ici - https://developercommunity.visualstudio.com/content/problem/124214/visual-studio-2017-ssdt-adds-hardcoded-mmsdb-andor.html

16
Jason Kohlhoff

Il utilise le chemin absolu qui n'existe pas dans l'agent Hosted VS2017. (Professionnel vs Enterprise). Vous pouvez vérifier le fichier de projet (ouvrir le fichier sqlproj via nodepad)

Vous pouvez copier master.dacpac dans votre dossier de projet et l'inclure dans le projet, puis ajouter la référence à ce fichier.

3
starian chen-MSFT