Versiunea SVN revizuită în .NET Assembly w/out CC.NET

Există vreo modalitate de a include numărul de revizuire al magaziei SVN în șirul de versiuni al unui asamblu .NET? Ceva ca Major.Minor.SVNRev

Am văzut că am făcut acest lucru cu ceva de genul CC.NET (deși pe ASP.NET de fapt), dar există vreo modalitate de ao face fără software suplimentar? Am făcut lucruri asemănătoare în C/C ++ înainte de a folosi scripturile batch build, dar a fost realizată citirea numărului de versiune, apoi scrierea unui fișier numit "ver.h" în fiecare moment cu ceva în efectul:

#define MAJORVER 4
#define MINORVER 23
#define SOURCEVER 965

Apoi vom folosi aceste definiții pentru a genera șirul de versiuni.

Este ceva de genul asta posibil pentru .NET?

0
fr hi bn
Stackoverflow arată numărul de revizie din subsol, poate că Jeff ne poate spune cum face acest lucru.
adăugat autor Jedi Master Spooky, sursa
vedeți răspunsul meu - există un proiect github care face același lucru
adăugat autor Tim, sursa
Aceasta este excelenta - data si numarul versiunii svn fatlemon.co.uk/2011/11/…
adăugat autor Tim, sursa
Linkul de mai sus nu se poate încărca corect. adresa github este în răspunsul meu de mai jos. - Pentru o soluție care utilizează data AND svn rev.
adăugat autor Tim, sursa

7 răspunsuri

svn info, vă spune versiunea pe care vă aflați, puteți realiza un eveniment "pre-build" în VS pe proiectul dvs. pentru a genera assemblyinfo.cs executând informații svn și analizând rezultatele acestuia cu o aplicație de linie de comandă dezvoltată la domiciliu.

Am facut acest lucru inainte, dar am trecut rapid la a avea ccnet sa treaca ca o variabila la nant.

0
adăugat

Dacă doriți să actualizați numărul versiunii într-un proiect AssemblyInfo.cs, vă recomandăm să vă interesați de acest articol:

CodeProject: Utilizați numerele de revizuire a subversiunii în proiectele Visual Studio

Dacă activați Cuvintele cheie SVN, atunci de fiecare dată când verificați în proiect, Subversion scanează fișierele pentru anumite "cuvinte cheie" și înlocuiește cu unele informații cuvintele cheie.

     

De exemplu, în partea de sus a fișierelor sursă aș crea un antet care să conțină următoarele cuvinte cheie:

     

'$ Autor: $
  „$ Id: $
  „$ Rev: $

     

Când verific acest fișier în Subversiune, aceste cuvinte cheie sunt înlocuite cu următoarele:

     

'$ Autor: paulbetteridge $
  '$ Id: myfile.vb 145 2008-07-16 15: 24: 29Z paulbetteridge $
  '$ Rev: 145 $

0
adăugat
din acest articol: "Limitarea utilizării cuvântului cheie $ Rev $ este că vă oferă doar revizuirea fișierului și nu întregul proiect, astfel că utilizarea cuvântului cheie $ rev $ nu poate funcționa ca parte a versiunii software". astfel încât ar trebui să editați/comite assembly.cs pe fiecare revizuire pentru ao menține actualizată?
adăugat autor Lucas, sursa

Have a look at SubWCRev - http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

Numerele versiunii de asamblare sunt de obicei în assemblyinfo.cs

0
adăugat
Am adăugat un exemplu de implementare ca răspuns nou.
adăugat autor R. Schreurs, sursa

Este posibil, dar nu ar trebui: componentele șirului de versiune de asamblare să fie limitate la numere pe 16 biți (max 65535). Numerele de revizie a subversiunii pot deveni cu ușurință mai mari decât atât, încât la un moment dat compilatorul se va plânge brusc.

0
adăugat
@soupdog: sugestia ta de a "desface" o revizuire este una buna pe care am considerat-o eu. Aceasta complică lucrurile un pic, totuși, așa cum trebuie să alegeți un offset pentru a scădea de la revizuire și nu uitați să verificați dacă offsetul trebuie să fie actualizat de fiecare dată când major.minor se modifică. Mai este ceva de întreținut. Când aveți depozite cu zeci de mii de revizuiri ca în cazul nostru, încărcarea cognitivă este o problemă.
adăugat autor Wim Coenen, sursa
Buna observatie. La 20 comenzi pe zi aceasta va dura 8 ani. 100 de angajamente vor dura mai puțin de 2 ani. Ar putea fi bine pentru proiecte mici. Cu siguranță nu este bine pentru cele mari.
adăugat autor Tim, sursa
@ Timp, numai dacă membrii proiectului lucrează cu normă întreagă 7 zile pe săptămână :-) Presupunând o săptămână de lucru de 5 zile, estimările sunt de 13 și, respectiv, de 2,6 ani. Pentru primul caz, diferența poate fi semnificativă.
adăugat autor Péter Török, sursa
De asemenea, puteți specifica un decalaj negativ. Din SubWcRev manuală, capitolul 6 : $ WCREV- $, $ WCREV + $ Înlocuit cu cea mai mare comite de revizuire în copia de lucru, cu valoarea după + sau - char adăugate sau scăzute. De exemplu: $ WCREV-1000 $ . Acest lucru ar putea fi folosit pentru resetarea/micșorarea numărului de revizie după, de exemplu, majorarea a fost mărită.
adăugat autor R. Schreurs, sursa
În plus, ar trebui să modificați versiunea de asamblare doar dacă rupe compatibilitatea cu versiunea anterioară - nu trebuie să puneți versiunea de versiune a versiunii de asamblare. Informațiile despre versiunile de construcție pot și ar trebui să fie puse în AssemblyFileVersion, care nu suportă numere pe 32 de biți. Consultați stackoverflow.com/questions/64602 .
adăugat autor Darryl, sursa
@WimCoenen: Nu cred că este atât de complicat. Prin revizuirea major-minor vă oferă destul context, ceea ce vreau să spun este că ar trebui să fie suficient de ușor să identificați manual domeniul reviziilor SVN în care vă aflați, uitandu-te la primele trei numere și apoi puteți rezolva de câte ori pentru a adăuga 65536 la numărul de construire pentru a obține revizuirea SVN absolută. Cred că depinde de modul în care doriți să utilizați informațiile și de ce nivel de automatizare este necesar. În orice caz, în cea mai mare parte am fost în dezacord cu declarația "nu ar trebui să", deoarece pen
adăugat autor soupdog, sursa
-1, acest lucru nu este un motiv foarte bun. 65536 de angajamente nu este o limitare practică pentru majoritatea produselor. Și chiar și pentru produsele care depășesc acest număr, revoluția major-minor ar trebui să ofere suficient context pentru a "desface" revizuirea valorii corecte (cu siguranță nu veți avea angajamente de 64k pentru fiecare revizuire a aplicației dvs. dacă sunt versiune sensibil).
adăugat autor soupdog, sursa

Un alt răspuns a menționat că numărul de revizie SVN ar putea să nu fie o idee bună datorită limitei dimensiunii numărului.

Următorul link oferă nu numai un număr de revizuire SNV, ci și un șablon de informație pentru versiunea de dată.

Adăugarea acestui lucru la un proiect .NET este simplă - trebuie să faceți foarte puțin de lucru.

Here is a github project that addresses this https://github.com/AndrewFreemantle/When-The-Version/downloads

Următoarea adresă URL poate fi încărcată lent, dar este o explicație pas-cu-pas a modului de a face acest lucru (ușor și scurt 3 sau 4 pași)

http: //www.fatlemon.co.uk/2011/11/wtv-automatic-date-based-version-numbering-for-net-with-whentheversion/

0
adăugat
Această soluție este rapidă și eficientă
adăugat autor Simon F, sursa

Iată și exemplul C# pentru actualizarea automată a informațiilor despre revizie în ansamblu. Se bazează pe răspunsul lui Will Dean, care nu este foarte elaborat.

Exemplu:

  1. Copy AssemblyInfo.cs to AssemblyInfoTemplate.cs in the project's folder Properties.
  2. Change the Build Action to None for AssemblyInfoTemplate.cs.
  3. Modify the line with the AssemblyFileVersion to:

    [assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

  4. Consider adding:

    [assembly: AssemblyInformationalVersion("Build date: $WCNOW=%Y-%m-%d %H:%M:%s$; Revision date: $WCDATE=%Y-%m-%d %H:%M:%s$; Revision(s) in working copy: $WCRANGE$$WCMODS?; WARNING working copy had uncommitted modifications:$.")],

    which will give details about the revision status of the source the assembly was build from.

  5. Add the following Pre-build event to the project file properties:

    subwcrev "$(SolutionDir)." "$(ProjectDir)Properties\AssemblyInfoTemplate.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" -f

  6. Consider adding AssemblyInfo.cs to the svn ignore list. Substituted revision numbers and dates will modify the file, which results in insignificant changes and revisions and $WCMODS$ will evaluate to true. AssemblyInfo.cs must, of course, be included in the project.

Ca răspuns la obiecțiile lui Wim Coenen, am observat că, spre deosebire de ceea ce a sugerat Darryl, AssemblyFileVersion susține și numerele nu care susțin numerele de peste 2 ^ 16. Construcția va fi finalizată, dar proprietatea Versiunea fișierului în ansamblul actual va fi AssemblyFileVersion modulo 65536. Astfel, 1.0.0.65536 precum și 1.0.0.131072 vor da 1.0.0.0 etc. În acest exemplu, există întotdeauna adevăratul număr de revizie în proprietatea AssemblyInformationalVersion. Ați putea lăsa pasul 3, dacă considerați că aceasta este o problemă semnificativă.

Editați: unele informații suplimentare după ce ați folosit această soluție pentru o perioadă.

  1. It now use AssemblyInfo.cst rather than AssemblyInfoTemplate.cs, because it will automatically have Build Action option None, and it will not clutter you Error list, but you'll loose syntax highlighting.
  2. I've added two tests to my AssemblyInfo.cst files:

    #if(!DEBUG)    
        $WCMODS?#error Working copy has uncommitted modifications, please commit all modifications before creating a release build.:$ 
    #endif 
    #if(!DEBUG)       
        $WCMIXED?#error Working copy has multiple revisions, please update to the latest revision before creating a release build.:$ 
    #endif
    

    Using this, you will normally have to perform a complete SVN Update, after a commit and before you can do a successful release build. Otherwise, $WCMIXED will be true. This seems to be caused by the fact that the committed files re at head revision after the commit, but other files not.

  3. I have had some doubts whether the first parameter to subwcrev, "$(SolutionDir)", which sets the scope for checking svn version info, does always work as desired. Maybe, it should be $(ProjectDir), if you are content if each individual assembly is in a consistent revision.

Addition To answer the comment by @tommylux.

SubWcRev poate fi folosit pentru orice fișier în proiect. Dacă doriți să afișați informații despre revizie într-o pagină Web, puteți utiliza acest șablon VersionInfo:

public class VersionInfo
{       
    public const int RevisionNumber = $WCREV$;
    public const string BuildDate = "$WCNOW=%Y-%m-%d %H:%M:%s$";
    public const string RevisionDate = "$WCDATE=%Y-%m-%d %H:%M:%s$";
    public const string RevisionsInWorkingCopy = "$WCRANGE$";
    public const bool UncommitedModification = $WCMODS?true:false$;
}

Adăugați un eveniment pre-build la fel ca cel pentru AssemblyInfo.cst și veți avea acces ușor la toate informațiile relevante pentru SubVersion.

0
adăugat
+1 Acesta este cel mai bun răspuns, în opinia mea.
adăugat autor Jonathon Reinhart, sursa
@tommylux 2) a se vedea adăugarea mea la răspuns.
adăugat autor R. Schreurs, sursa
@tommylux 1) Puteți utiliza soluția oferită în Cum pot obține versiunea de execuție a asamblării?
adăugat autor R. Schreurs, sursa
@ 100r, am corectat numele fișierelor pe care le-am scris în mod greșit. Sper că acest lucru vă va rezolva confuzia. Dacă nu, anunțați-ne.
adăugat autor R. Schreurs, sursa
Puteți elabora această a doua parte. Nu o înțeleg pe deplin. Ați redenumit AssemblyInfo.cs la AssemblyInfo.cst? Sau? Ce se întâmplă cu șablonul? Unde ați adăugat aceste noi teste? În ce parte a dosarului? Răspuns bun BTW!
adăugat autor 100r, sursa
Acum este mai clar. Mulțumiri :)
adăugat autor 100r, sursa
Sunt de acord, acesta este răspunsul corect, nu doar un link către informații despre un instrument pe care îl poți folosi.
adăugat autor soupdog, sursa
Acest lucru arata foarte bine, dar cum ati putea imprima acest lucru pe o pagina ASP? adică: <% $ Properties: AssemblyVersion%>
adăugat autor tommylux, sursa
Mulțumesc că te-ai întors. Nu am putut vedea cum să lucrăm într-o clasă. Nu sunt prea familiarizat cu clasele. Eroare ";" așteptat. WCREV nu există în contextul actual. Am adăugat Reflecția în referințele mele. Cu toate acestea, am reușit să imprimați acest lucru folosind: RevisionInfo.InnerText = System.Diagnostics.FileVersionInfo.GetVersionInfo (Assembly.G & zwnj; etExecutingAssembly (& zwnj;) .Location) .FileVers & zwnj; ion.ToString (); Aceasta pare să aibă numărul de construire corect din Subversion. Vă mulțumim pentru răspunsul dvs. Am acest lucru, deși trebuie să recunosc, nu înțeleg de
adăugat autor tommylux, sursa
Se pare că mi-am dat seama de clasa ta. Cred că a fost pentru că nu știam cum funcționează fișierul cst. Când puneți Public Class VersionInfo în cst, pe build, acest lucru va umple fișierul cs și apoi devine utilizabil în proiect cu informațiile versiunii traduse de la controlul sursă. Vă mulțumim din nou.
adăugat autor tommylux, sursa

Aveți posibilitatea să utilizați un fișier de versiune a Asamblării partajate pe care îl puteți face referire în toate proiectele dvs.

UppercuT does this - http://ferventcoder.com/archive/2009/05/21/uppercut---automated-builds---versionbuilder.aspx

Acest lucru vă va oferi o idee despre ce puteți face pentru a obține versiuni în ansamblurile dvs.

0
adăugat