Domanda

Tutti i nostri progetti nella nostra SLN condivide una versioneINFO.CS che contiene il numero di versione del progetto

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

Voglio definire staticamente le 3 prime parti del numero di versione e l'ultima parte che voglio essere la copia di lavoro svn revisione.

PASSAGGIO numero uno è quello di definire un evento pre-build in VS che attiva uno script CMD, è un modo semplice per ottenere la revisione della copia di lavoro da CMD?

PASSAGGIO numero due è inserire quel numero nel file versioneinfo.cs

C'è probabilmente modi più eleganti per fare questo, se ne hai uno in negozio, tieni presente che questo è un progetto open source e non abbiamo un server di build di fantasia o qualcosa del genere.La procedura di distribuzione è appena inserita il progetto in modalità di rilascio e build: D

È stato utile?

Soluzione 3

hmjd: s soluzione era solo metà del presente, se si scrive sul file ogni volta che si crea tutti i progetti che fanno riferimento alla versione versione per ricostruire anche se nulla è cambiato, ho modificato lo script solo per scrivere il file se è ANuovo numero di revisione

@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
.

Altri suggerimenti

.

C'è un modo semplice per ottenere la revisione della copia di lavoro da CMD?

C'è un eseguibile chiamato svnversion.exe che stampa sullo standard output la revisione.Se assicurati che questo sia nel tuo PATH, puoi chiamarlo.

.

Per inserire quel numero nel file versioneinfo.cs

È possibile generare completamente il file VesionInfo.cs, o parzialmente, da un file 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
.

Modifica:

Aggiornato il file batch per far fronte ai numeri di revisione del formato RR, NN:RR e NN:RRM in cui NN è un numero intero e RR è la revisione:

@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
.

    .
  • Se è Visualstudio, è Windows
  • Se è Windows, è possibile utilizzare Subwcrev da TortoiseSvn

      .
    1. Scrivi il modello di versioneINFO.cs in repository invece del file finale, la parte variabile dei dati sostituiti da (appropriata) subwcrev-parole chiave
    2. su ogni processo di build-process run subwcrev, che scrivi file finale con dati effettivi da Modello e WC-Data (Builder Full Builder può essere / avviata / semplicemente come svn export + subwcrev wc-path VersionInfo.cs.tpl VersionInfo.cs)

Scarica MSBuild Community Task e installarlo.

Apri il tuo .csproj e alla fine (prima della chiusura </project> Tag)

Incolla il seguente codice (non modificare il tag <Import>):

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

Dopo il tag <Import> incolla il seguente:

  <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>
.

Guarda l'attributo Toolpath All'interno del tag SVNversion, c'è dove è necessario identificare la posizione in cui nella tua macchina è il file SVNVersion.exe Binary.

Supponendo di installare il software TortoiseSvn, il percorso è: C:\ProgramFiles\TortoiseSVN\bin\ Potresti anche utilizzare i binari Visualsvn (in questo caso, il file binario si trova su C:\ProgramFiles\VisualSVN\bin\)

Con questa modifica nel tuo .csproj, in ogni progetto di build, il msbuild chiamerà prima la svnversion.exe (con argomento, la directory della soluzione corrente) e la SVnversion restituirà il numero di revisione per quel repository. Nel tag FileUPDate, MSbuild cercherà il modello di regex e quindi sostituire con i valori correnti per Maggiore, Minori e Build ($ 1, $ 2 e $ 3 rispettivamente) e aggiornare la revisione con il valore di revisione variabile

Puoi provare a usare sostituti di parole chiave per sostituire il numero mentre stai commettendo.Hanno questo come esempio:

$Rev$:     Revision of last commit
$Author$:  Author of last commit
$Date$:    Date of last commit
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top