MISE À JOUR
J'ai maintenant découvert que la syntaxe if/else ci-dessus ne fonctionne pas pour moi car certains de mes scripts liés nécessitent une instruction GO. Essentiellement, le :r importe simplement les scripts en ligne, ce qui devient une syntaxe invalide.
Si vous avez besoin d'une instruction GO dans les scripts liés (comme je le fais), il n'y a pas de moyen simple de contourner cela, j'ai fini par créer plusieurs scripts de post-déploiement, puis en modifiant mon projet pour écraser le script de post-déploiement principal au moment de la construction en fonction sur la configuration de construction. Cela fait maintenant ce dont j'ai besoin, mais il semble qu'il devrait y avoir un moyen plus simple !
Pour tous ceux qui ont besoin de la même chose - J'ai trouvé ce message utile
Donc, dans mon projet, j'ai les fichiers de post-déploiement suivants :
- Script.PostDeployment.sql (fichier vide qui sera remplacé)
- Default.Script.PostDeployment.sql (liens vers les scripts nécessaires pour la configuration standard des données)
- Configuration1.Script.PostDeployment.sql (liens vers les scripts nécessaires pour une configuration de données spécifique)
J'ai ensuite ajouté ce qui suit à la fin du fichier de projet (clic droit pour décharger puis clic droit pour éditer) :
<Target Name="BeforeBuild">
<Message Text="Copy files task running for configuration: $(Configuration)" Importance="high" />
<Copy Condition=" '$(Configuration)' == 'Release' " SourceFiles="Scripts\Post-Deployment\Default.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
<Copy Condition=" '$(Configuration)' == 'Debug' " SourceFiles="Scripts\Post-Deployment\Default.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
<Copy Condition=" '$(Configuration)' == 'Configuration1' " SourceFiles="Scripts\Post-Deployment\Configuration1.Script.PostDeployment.sql" DestinationFiles="Scripts\Post-Deployment\Script.PostDeployment.sql" OverwriteReadOnlyFiles="true" />
</Target>
Enfin, vous devrez configurer des configurations de construction correspondantes dans la solution.
De plus, pour ceux qui essaient d'autres solutions, j'ai également essayé ce qui suit sans succès :
-
Création d'un événement post-construction pour copier les fichiers au lieu d'avoir à pirater le fichier XML du projet. Je n'ai pas pu faire fonctionner cela car je n'ai pas pu former le chemin correct vers le fichier de script de post-déploiement. Ce problème de connexion décrit le problème
-
Utilisation de variables pour le chemin du script à transmettre à la commande :r. Mais j'ai rencontré plusieurs erreurs avec cette approche.