Question

Stack Overflow a un numéro de version de Subversion en bas :

révision svn :679

Je souhaite utiliser une telle gestion de version automatique avec mon .NET Web Site/Application, Windows Forms, projets/solutions WPD.

Comment puis-je mettre en œuvre cela ?

Était-ce utile?

La solution

On dirait que Jeff utilise CruiseControl.NET basé sur quelques feuilletages des transcriptions du podcast.Cela semble avoir des capacités de déploiement automatisées du contrôle des sources à la production.Serait-ce là que se produit l'insertion ?

Autres conseils

Nous faisons cela avec xUnit.net pour nos builds automatisés.Nous utilisons CruiseControl.net (et j'essaie TeamCity).La tâche MSBuild que nous exécutons pour l'intégration continue modifie automatiquement le numéro de build pour nous, de sorte que le fichier ZIP de build résultant contient un ensemble correctement versionné de DLL et d'EXE.

Notre Fichier MSBuild contient une référence UsingTask pour une DLL qui effectue des remplacements d'expressions régulières :(vous pouvez utiliser cette DLL, car elle est également couverte par la licence MS-PL)

  <UsingTask
     AssemblyFile="3rdParty\CodePlex.MSBuildTasks.dll"
     TaskName="CodePlex.MSBuildTasks.RegexReplace"/>

Ensuite, nous extrayons le numéro de build, qui est fourni automatiquement par le système CI.Vous pouvez également demander à votre fournisseur de contrôle de code source de fournir le numéro de révision source si vous le souhaitez, mais nous avons trouvé que le numéro de build dans le système CI était plus utile, car non seulement vous pouvez voir les résultats de l'intégration par le numéro de build CI, mais cela fournit également un lien vers le ou les ensembles de modifications qui ont été inclus dans la construction.

 <!-- Cascading attempts to find a build number -->

 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>$(BUILD_NUMBER)</BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>$(ccnetlabel)</BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>0</BuildNumber>
 </PropertyGroup>

(Nous essayons BUILD_NUMBER, qui provient de TeamCity, puis ccnetlabel, qui provient de CC.net, et si aucun des deux n'est présent, nous mettons par défaut la valeur 0, afin de pouvoir tester manuellement le script de construction automatisé.)

Ensuite, nous avons une tâche qui définit le numéro de build dans un fichier GlobalAssemblyInfo.cs que nous lions à tous nos projets :

 <Target Name="SetVersionNumber">
   <RegexReplace
       Pattern='AssemblyVersion\("(\d+\.\d+\.\d+)\.\d+"\)'
       Replacement='AssemblyVersion("$1.$(BuildNumber)")'
       Files='GlobalAssemblyInfo.cs'/>
   <Exec Command="attrib -r xunit.installer\App.manifest"/>
 </Target>

Cela recherche l'attribut AssemblyVersion et remplace le numéro de version a.b.c.d par a.b.c.BuildNumber.Nous laisserons généralement la source enregistrée dans l'arborescence avec les trois premières parties du numéro de constructeur fixes et la quatrième à zéro (par exemple, aujourd'hui, c'est 1.0.2.0).

Dans votre processus de génération, assurez-vous que la tâche SetVersionNumber précède votre tâche de génération.À la fin, nous utilisons notre tâche Zip pour compresser les résultats de la build afin d'avoir un historique des binaires pour chaque build automatisée.

Vous pouvez le faire en ajoutant ce qui suit n'importe où dans votre code

$Id:$

Ainsi, par exemple, @Jeff a fait :

<div id="svnrevision">svn revision: $Id:$</div>

et une fois enregistré, le serveur a remplacé $Id:$ par le numéro de révision actuel.moi aussi j'ai trouvé cette référence.

Il y a aussi $Date :$, $Rév :$, $Révision :$

Si vous utilisez ASP.Net MVC (comme le fait StackOverflow), j'ai écrit un guide facile à suivre en 3 étapes sur la façon d'obtenir et d'afficher automatiquement la dernière révision SVN.Le guide a été inspiré par ma réflexion sur cette question !:o)

@Balloon Si vous utilisez TortoiseSVN, vous pouvez utiliser l'emballage Sous-WCRRev programme.Il interroge une copie de travail et vous indique uniquement le numéro de révision le plus élevé.Certes, cela semble être une approche côté client d'un problème côté serveur, mais comme il s'agit d'un programme en ligne de commande intéressant, vous devriez pouvoir capturer sa sortie pour l'utiliser assez facilement.

$rev et d'autres comme celui-ci sont des révisions pour les fichiers individuels, ils ne changeront donc pas à moins que le fichier ne change.Le numéro sur la page Web est (très probablement, je suppose ici) le numéro de révision SVN pour l'ensemble du projet.C'est différent des révisions de fichiers, que d'autres ont signalées.

Dans ce cas, je suppose que CCNET extrait le numéro de révision du projet et réécrit une partie de la page Web avec ce numéro.Toute solution CI devrait être capable de le faire, configurez-la moi-même avec CCNET et Teamcity (mais pas des pages Web, mais une gestion automatique des versions des versions de déploiement/assemblage).

Pour ce faire, utilisez une solution CI qui la prend en charge ou utilisez votre processus de construction (MSbuild/Nant) pour stocker cette version et l'écrire dans les fichiers avant de la « déployer ».

Pour ajouter à la réponse de @BradWilson : "Vous pouvez également demander à votre fournisseur de contrôle de source de fournir le numéro de révision de la source si vous le souhaitez"

Pour connecter Subversion et MSBuild :Projet de tâches communautaires MSBuild

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