Question

Tous nos projets dans notre SLN partagent une versionInfo.cs qui détient le numéro de version du projet

[assembly: AssemblyVersion("0.0.1.0")]
[assembly: AssemblyFileVersion("0.0.1.0")]

Je veux définir de manière statique les 3 premières parties du numéro de version et la dernière partie que je veux être la révision SVN de copie de travail.

L'étape numéro un consiste à définir un événement pré-construction dans VS qui déclenche un script CMD, y a-t-il un moyen facile d'obtenir la révision de la copie de travail à partir de CMD?

L'étape numéro deux consiste à insérer ce numéro dans le fichier versioninfo.cs

Il y a probablement des façons plus élégantes de le faire, si vous en avez une en magasin, gardez à l'esprit qu'il s'agit d'un projet open source et que nous n'avons pas de serveur de construction sophistiqué ou quelque chose comme ça. La procédure de déploiement est juste de mettre le projet en mode de libération et de construction: D

Était-ce utile?

La solution 3

La solution HMJD: S n'était qu'à moitié là, si vous écrivez dans le fichier chaque fois que vous créez tous les projets en référence au fichier de versions doit reconstruire même si rien n'a changé, j'ai modifié le script pour écrire dans le fichier que si c'est un nouveau numéro de révision

@ECHO off

FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion ../ -c') do SET PART_1=%%A&SET PART_2=%%B

SET file=../VersionInfo.cs

IF NOT DEFINED PART_2 (
SET SVN_REV=%PART_1%
)

IF NOT DEFINED SVN_REV (
SET SVN_REV=%PART_2%
)

set result=0

for /f "tokens=3" %%f in ('find /c /i ".%SVN_REV%." %file%') do set result=%%f

IF %result% gtr 0 (
GOTO end
)

ECHO using System.Reflection; > %file%
ECHO [assembly: AssemblyVersion("0.1.%SVN_REV%.0")]     >>  %file%
ECHO [assembly: AssemblyFileVersion("0.1.%SVN_REV%.0")] >> %file%

:end

Autres conseils

Existe-t-il un moyen facile d'obtenir la révision de la copie de travail de CMD?

Il y a un exécutable appelé svnversion.exe qui imprime sur la sortie standard la révision. Si vous vous assurez que c'est dans votre PATH Vous pourriez appeler cela.

Pour insérer ce numéro dans le fichier versioninfo.cs

Vous pouvez générer le VesionInfo.cs fichier complètement, ou partiellement, à partir d'un fichier batch:

@echo off

FOR /F %%A in ('svnversion') do SET SVN_REV=%%A

echo [assembly: AssemblyVersion("0.0.1.%SVN_REV%")]     >  VersionInfo.cs
echo [assembly: AssemblyFileVersion("0.0.1.%SVN_REV%")] >> VersionInfo.cs

ÉDITER:

Fichier par lots mis à jour pour faire face aux numéros de révision du format RR, NN:RR et NN:RRMNN est un entier et RR est la révision:

@ECHO off

FOR /F "tokens=1,2 delims=:M" %%A in ('svnversion') do SET PART_1=%%A&SET PART_2=%%B

IF NOT DEFINED PART_2 (
SET SVN_REV=%PART_1%
)

IF NOT DEFINED SVN_REV (
SET SVN_REV=%PART_2%
)

ECHO [assembly: AssemblyVersion("0.0.1.%SVN_REV%")]     >  VersionInfo.cs
ECHO [assembly: AssemblyFileVersion("0.0.1.%SVN_REV%")] >> VersionInfo.cs
  • Si c'est VisualStudio, ce sont Windows
  • S'il s'agit de fenêtres, vous pouvez utiliser Subwcrev de TortoiseSVN

    1. Écrivez un modèle de versionInfo.cs dans le référentiel au lieu du fichier final, il y a une partie modifiable des données remplacées par (approprié) Subwcrev-Keyword
    2. Sur chaque Build-Process Run Subwcrev, qui écrit un fichier final avec des données réelles de Template et WC-Data (le constructeur complet peut être / démarré / aussi simplement que svn export + subwcrev wc-path VersionInfo.cs.tpl VersionInfo.cs)

Télécharger Tâche de la communauté MSBuild et l'installez.

Ouvrez votre .csproj et à la fin (avant la fermeture </project> étiquette)

Collez le code suivant (ne changez pas <Import> étiquette):

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 

Après le <Import> Tag Coller ce qui suit:

  <Target Name="BeforeBuild">
      <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\TortoiseSVN\bin">
          <Output TaskParameter="Revision" PropertyName="Revision" />
      </SvnVersion>
      <FileUpdate Files="Properties\AssemblyInfo.cs" Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)" ReplacementText="$1.$2.$3.$(Revision)" />
  </Target>

Regardez l'attribut Parcours d'outils À l'intérieur de la balise SVNVersion, il y a où vous devez identifier l'emplacement où dans votre machine se trouve svnversion.exe fichier binaire.

En supposant que le logiciel TortoiseSVN soit installé, le chemin vers lui est: C:\ProgramFiles\TortoiseSVN\bin\Vous pouvez également utiliser les binaires VisualSVN (dans ce cas, le fichier binaire est situé à C:\ProgramFiles\VisualSVN\bin\)

Avec cette modification de votre .csproj, dans chaque projet de build, le MSBuild appellera d'abord le svnversion.exe (avec l'argument, le répertoire de solution actuel) et le SVNversion renvoie le numéro de révision de ce référentiel. Dans la balise FileUpdate, MSBuild recherchera le modèle Regex, puis remplacera les valeurs actuelles pour la majeure, mineure et la construction (1 $, 2 $ et 3 $ respectivement) et mettre à jour la révision par la valeur de révision variable

Vous pouvez essayer d'utiliser Substituts de mots clés Pour remplacer le numéro pendant que vous vous engagez. Ils ont cela comme exemple:

$Rev$:     Revision of last commit
$Author$:  Author of last commit
$Date$:    Date of last commit
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top