Nous le faisons avec xUnit.net pour nos générations automatisées. Nous utilisons CruiseControl.net (et essayer TeamCity). La tâche MSBuild que nous avons pour l'intégration continue change automatiquement le numéro de build pour nous, de sorte que le montant de construire le fichier ZIP contient un correctement versionnées ensemble de Dll et Exe.
Notre MSBuild fichier contient un UsingTask de référence pour une DLL qui ne des expressions régulières de remplacement: (vous êtes les bienvenus pour utiliser cette DLL, comme il est couvert par la MS-PL licence)
<UsingTask
AssemblyFile="3rdParty\CodePlex.MSBuildTasks.dll"
Nom_tâche="CodePlex.MSBuildTasks.RegexReplace"/>
Ensuite, nous avons extrait le numéro de build, qui est fourni automatiquement par le système CI. Vous pouvez aussi obtenir votre source de contrôle du fournisseur de fournir la source numéro de révision si vous le souhaitez, mais nous avons trouvé le build # dans le système CI était plus utile, parce que non seulement pouvez voir les résultats de l'intégration par le CI le numéro de build, qui fournit également un lien vers l'ensemble de modifications(s) qui ont été inclus dans la construction.
<!-- En cascade, essaye de trouver un numéro de build -->
<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 est de TeamCity, puis ccnetlabel, qui est de CC.net et si aucune n'est présente, nous avons par défaut à 0, de sorte que nous pouvons tester la version automatique de script manuellement.)
Ensuite, nous avons une tâche qui définit le numéro de build dans un GlobalAssemblyInfo.cs fichier que nous lien dans tous nos projets:
<Target Name="SetVersionNumber">
<RegexReplace
Pattern='AssemblyVersion\("(\d+\.\d+\.\d+)\.\d+"\)'
Remplacement='AssemblyVersion("$1.$(BuildNumber)")'
Fichiers='GlobalAssemblyInfo.cs'/>
<Commande Exec="attrib -r xunit.installer\App.manifeste"/>
</Target>
Cette découverte le AssemblyVersion attribut, et remplace le un.b.c.d numéro de version avec un.b.c.BuildNumber. Nous avons l'habitude de laisser la source vérifiée dans l'arbre, avec les trois premières parties du générateur de nombre fixe, et la quatrième à zéro (f.e., aujourd'hui, c'est 1.0.2.0).
Dans votre processus de création, assurez-vous que le SetVersionNumber tâche précède votre tâche de génération. À la fin, nous utilisons notre Zip tâche à zip up les résultats de la compilation, de sorte que nous avons une histoire des binaires pour chaque génération automatisée.