Bonjour à tous.
J'ai tout un framework que je déploie souvent (sous windows), je souhaite donc automatiser le plus possible le déploiement d'une version de la compilation jusqu'à la publication en ligne. J'ai donc les étapes suivante complètement en automatique (plus précisément en .bat)
Compilation (devenv ligne de commande)
Construction du package (xcopy)
Génération du setup (vdproj)
Réalisation d'un zip
Upload sur ftp
Je suis conscient qu'il existe des outils complet qui font ces manœuvres mais mon environnement de travail m'impose des contraintes non négociables.
je souhaite rajouter une étape entre "Construction du package" et génération du setup" pour donner un numéro de version à mon package (en fonction des différents numéro de révision des repository svn mis en jeu dans ce package.
J'ai fait un projet visual C# qui permets de manipuler les fichier .vdproj (visual deployement project) de visual pour faire évoluer mes numéros de version en automatique en fonction de mon svn.
le programme prends 4 arguments en paramètre
-le path de la solution
-le nom du projet
-nombre 1
-nombre 2
Voici le code principal :
J'appelle exécution l'appel de mon programme avec c'est paramètre dans un .bat
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 EnvDTE80.DTE2 myDTE2 = (EnvDTE80.DTE2)Microsoft.VisualBasic.Interaction.CreateObject("VisualStudio.DTE.8.0", ""); Solution sln = myDTE2.Solution; sln.Open("c:\maSolution.sln"); Projects projCollection = sln.Projects; System.Threading.Thread.Sleep(2000); for (int i = 1; i <= projCollection.Count; i++) { System.Threading.Thread.Sleep(2000); if (projCollection.Item(i).Name == "vdprojName") { System.Threading.Thread.Sleep(2000); string currentTitle = projCollection.Item(i).Properties.Item("Title").Value.ToString(); System.Threading.Thread.Sleep(2000); string newProductGuid = (new Guid()).ToString(); projCollection.Item(i).Properties.Item("ProductName").Value = currentTitle; System.Threading.Thread.Sleep(2000); projCollection.Item(i).Properties.Item("ProductCode").Value = newProductGuid; System.Threading.Thread.Sleep(2000); projCollection.Item(i).Properties.Item("Version").Value = versionNumber; System.Threading.Thread.Sleep(2000); break; } } sln.Close(true);
Quand je dit DEBUG c'est F5 ou ctrl+F5 dans visual (en release ou debug)
Le premier est qu'en EXECUTION si je ne mets pas les System.Threading.Thread.Sleep(2000); entre chaque appel aux objets de EnvDTE.dll j'ai une erreur comme quoi l'activex ne réponds pas car il est occupé. Je n'ai pas ce problème en DEBUG
Le deuxième est qu'en EXECUTION il ne trouve pas les properties "ProductName", "ProductCode" et "Version" alors qu'il les trouve en DEBUG
Avez vous une idée?
Partager