Χρησιμοποιήστε SVN Αναθεώρηση για την επισήμανση χτίσει το CCNET

ψήφοι
39

Είμαι με τη χρήση CCNET σε ένα δείγμα έργου με SVN και τον έλεγχο πηγή μου. CCNET έχει διαμορφωθεί για να δημιουργήσει μια κατασκευή για κάθε check-in. CCNET χρησιμοποιεί MSBuild για την κατασκευή του πηγαίου κώδικα.

Θα ήθελα να χρησιμοποιήσει την τελευταία αριθμό αναθεώρησης για την παραγωγή AssemblyInfo.csκατά τη μεταγλώττιση. Πώς μπορώ να ανακτήσει την τελευταία αναθεώρηση από την ανατροπή και να χρησιμοποιήσει την αξία στην CCNET;

Επεξεργασία: Δεν χρησιμοποιώ Nant - μόνο MSBuild.

Δημοσιεύθηκε 04/08/2008 στις 12:37
πηγή χρήστη
Σε άλλες γλώσσες...                            


12 απαντήσεις

ψήφοι
44

CruiseControl.Net 1.4.4 έχει τώρα μια συνέλευση Έκδοση ετικετέζα , η οποία παράγει αριθμούς έκδοσης συμβατό με το .Net ιδιότητες συναρμολόγηση.

Στο έργο μου έχω διαμορφωθεί ως εξής:

<labeller type="assemblyVersionLabeller" incrementOnFailure="true" major="1" minor="2"/>

(Προειδοποίηση: assemblyVersionLabellerδεν θα αρχίσει να παράγει ετικέτες αναθεώρηση svn βάση μέχρι να συμβεί μια πραγματική διάπραξη-ενεργοποιείται κατασκευής.)

και στη συνέχεια να καταναλώνουν αυτό από τα έργα μου MSBuild με MSBuildCommunityTasks.AssemblyInfo :

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<Target Name="BeforeBuild">
  <AssemblyInfo Condition="'$(CCNetLabel)' != ''" CodeLanguage="CS" OutputFile="Properties\AssemblyInfo.cs" 
  AssemblyTitle="MyTitle" AssemblyCompany="MyCompany" AssemblyProduct="MyProduct"
  AssemblyCopyright="Copyright ©  2009" ComVisible="false" Guid="some-random-guid"
  AssemblyVersion="$(CCNetLabel)" AssemblyFileVersion="$(CCNetLabel)"/>
</Target>

Για λόγους completness, είναι εξίσου εύκολο για τα έργα που χρησιμοποιούν Nant αντί MSBuild:

<target name="setversion" description="Sets the version number to CruiseControl.Net label.">
    <script language="C#">
        <references>
            <include name="System.dll" />
        </references>
        <imports>
            <import namespace="System.Text.RegularExpressions" />
        </imports>
        <code><![CDATA[
             [TaskName("setversion-task")]
             public class SetVersionTask : Task
             {
              protected override void ExecuteTask()
              {
               StreamReader reader = new StreamReader(Project.Properties["filename"]);
               string contents = reader.ReadToEnd();
               reader.Close();
               string replacement = "[assembly: AssemblyVersion(\"" + Project.Properties["CCNetLabel"] + "\")]";
               string newText = Regex.Replace(contents, @"\[assembly: AssemblyVersion\("".*""\)\]", replacement);
               StreamWriter writer = new StreamWriter(Project.Properties["filename"], false);
               writer.Write(newText);
               writer.Close();
              }
             }
             ]]>
        </code>
    </script>
    <foreach item="File" property="filename">
        <in>
            <items basedir="..">
                <include name="**\AssemblyInfo.cs"></include>
            </items>
        </in>
        <do>
            <setversion-task />
        </do>
    </foreach>
</target>
Απαντήθηκε 10/06/2009 στις 13:37
πηγή χρήστη

ψήφοι
14

Έχετε βασικά δύο επιλογές. Είτε μπορείτε να γράψετε ένα απλό σενάριο που θα ξεκινήσει και θα αναλύσει εξόδου από την

svn.exe πληροφορίες --revision HEAD

να αποκτήσουν αριθμό αναθεώρησης (στη συνέχεια τη δημιουργία AssemblyInfo.cs είναι λίγο πολύ ευθεία προς τα εμπρός) ή απλά να χρησιμοποιήσετε το plugin για CCNET. Εδώ είναι:

SVN Αναθεώρηση ετικετέζα είναι ένα plugin για CruiseControl.NET που σας επιτρέπει να δημιουργήσετε ετικέτες CruiseControl για χτίζει σας, με βάση τον αριθμό αναθεώρησης του Subversion σας αντίγραφο εργασίας. Αυτό μπορεί να προσαρμοστεί με ένα πρόθεμα ή / και μεγάλες / μικρές αριθμούς έκδοσης.

http://code.google.com/p/svnrevisionlabeller/

Προτιμώ την πρώτη επιλογή, διότι αυτό είναι μόνο περίπου 20 γραμμές κώδικα:

using System;
using System.Diagnostics;

namespace SvnRevisionNumberParserSample
{
    class Program
    {
        static void Main()
        {
            Process p = Process.Start(new ProcessStartInfo()
                {
                    FileName = @"C:\Program Files\SlikSvn\bin\svn.exe", // path to your svn.exe
                    UseShellExecute = false,
                    RedirectStandardOutput = true,
                    Arguments = "info --revision HEAD",
                    WorkingDirectory = @"C:\MyProject" // path to your svn working copy
                });

            // command "svn.exe info --revision HEAD" will produce a few lines of output
            p.WaitForExit();

            // our line starts with "Revision: "
            while (!p.StandardOutput.EndOfStream)
            {
                string line = p.StandardOutput.ReadLine();
                if (line.StartsWith("Revision: "))
                {
                    string revision = line.Substring("Revision: ".Length);
                    Console.WriteLine(revision); // show revision number on screen                       
                    break;
                }
            }

            Console.Read();
        }
    }
}
Απαντήθηκε 04/08/2008 στις 12:56
πηγή χρήστη

ψήφοι
4

Έχω γράψει ένα αρχείο κατασκευή Nant που χειρίζεται την ανάλυση των πληροφοριών SVN και τη δημιουργία ιδιότητες. Στη συνέχεια χρησιμοποιήστε αυτές τις αξίες των ακινήτων για μια ποικιλία εργασιών κατασκευής, συμπεριλαμβανομένης της ρύθμισης της ετικέτας στην κατασκευή. Χρησιμοποιώ αυτό το στόχο σε συνδυασμό με το SVN Αναθεώρηση ετικετέζα αναφέρει ο Lubos hasko με εξαιρετικά αποτελέσματα.

<target name="svninfo" description="get the svn checkout information">
    <property name="svn.infotempfile" value="${build.directory}\svninfo.txt" />
    <exec program="${svn.executable}" output="${svn.infotempfile}">
        <arg value="info" />
    </exec>
    <loadfile file="${svn.infotempfile}" property="svn.info" />
    <delete file="${svn.infotempfile}" />

    <property name="match" value="" />

    <regex pattern="URL: (?'match'.*)" input="${svn.info}" />
    <property name="svn.info.url" value="${match}"/>

    <regex pattern="Repository Root: (?'match'.*)" input="${svn.info}" />
    <property name="svn.info.repositoryroot" value="${match}"/>

    <regex pattern="Revision: (?'match'\d+)" input="${svn.info}" />
    <property name="svn.info.revision" value="${match}"/>

    <regex pattern="Last Changed Author: (?'match'\w+)" input="${svn.info}" />
    <property name="svn.info.lastchangedauthor" value="${match}"/>

    <echo message="URL: ${svn.info.url}" />
    <echo message="Repository Root: ${svn.info.repositoryroot}" />
    <echo message="Revision: ${svn.info.revision}" />
    <echo message="Last Changed Author: ${svn.info.lastchangedauthor}" />
</target>
Απαντήθηκε 04/08/2008 στις 14:43
πηγή χρήστη

ψήφοι
4

Αν προτιμάτε να το κάνετε από την MSBuildπλευρά πάνω από το CCNetconfig, μοιάζει με την MSBuildπαράταση εργασιών του κοινοτικού SvnVersionέργο θα μπορούσε να κάνει το κόλπο.

Απαντήθηκε 04/08/2008 στις 13:03
πηγή χρήστη

ψήφοι
4

Βρήκα αυτό το έργο στον Κώδικα Google. Αυτό CCNETplugin για τη δημιουργία της ετικέτας σε CCNET.

Η DLLδοκιμάζεται με CCNET 1.3, αλλά λειτουργεί με CCNET 1.4για μένα. Είμαι με επιτυχία χρησιμοποιώντας αυτό το plugin για να ονομάσει την κατασκευή μου.

Τώρα σε αυτό που περνά για να MSBuild...

Απαντήθηκε 04/08/2008 στις 12:51
πηγή χρήστη

ψήφοι
3

Δεν είμαι σίγουρος αν αυτό το έργο με CCNET ή όχι, αλλά έχω δημιουργήσει μια SVN έκδοση plug-in για το Build Έκδοση Αύξηση σχέδιο για CodePlex. Αυτό το εργαλείο είναι πολύ ευέλικτο και μπορεί να ρυθμιστεί για να δημιουργήσει αυτόματα έναν αριθμό έκδοσης για σας χρησιμοποιώντας την αναθεώρηση svn. Δεν απαιτεί γράψιμο οποιουδήποτε κώδικα ή την επεξεργασία XML, έτσι yay!

Ελπίζω ότι αυτό είναι βοηθά!

Απαντήθηκε 12/04/2010 στις 02:04
πηγή χρήστη

ψήφοι
3

Προσαρμογή αρχεία csproj να δημιουργήσετε αυτόματα AssemblyInfo.cs
http://www.codeproject.com/KB/dotnet/Customizing_csproj_files.aspx

Κάθε φορά που δημιουργούμε ένα νέο C # έργο, Visual Studio τοποθετεί εκεί το αρχείο AssemblyInfo.cs για εμάς. Το αρχείο ορίζει τα μετα-δεδομένα συγκρότημα όπως εκδοχή του, της διάταξης, ή παραγωγό.

Βρέθηκε το παραπάνω τεχνική για να AssemblyInfo.cs auto-gen χρησιμοποιώντας MSBuild. Θα δημοσιεύσετε δείγμα σύντομα.

Απαντήθηκε 04/08/2008 στις 14:22
πηγή χρήστη

ψήφοι
3

Είμαι σήμερα «χειροκίνητα» το κάνει μέσω ενός prebuild-exec εργασιών, χρησιμοποιώντας μου cmdnetsvnrev εργαλείο, αλλά αν κάποιος ξέρει μια καλύτερη ccnet ολοκληρωμένο τρόπο για να γίνει αυτό, θα ήμουν ευτυχής να ακούσω :-)

Απαντήθηκε 04/08/2008 στις 12:41
πηγή χρήστη

ψήφοι
2

Δεν έχω ιδέα πού βρήκα αυτό. Αλλά βρήκα αυτό στο διαδίκτυο «κάπου».

Αυτό ενημερώνει όλα τα αρχεία AssemblyInfo.cs πριν από την πραγματοποίηση της κατασκευής.

Δουλεύει άψογα. Όλα και δείχνουν dll είναι ως 1.2.3.333 exe μου (Αν το «333» ήταν η αναθεώρηση SVN τη στιγμή.) (Και η αρχική έκδοση του αρχείου AssemblyInfo.cs ήταν αναφέρεται ως «1.2.3.0»)


$ (ProjectDir) (Σε περίπτωση που το αρχείο .sln μου κατοικεί)

$ (SVNToolPath) (σημεία svn.exe)

είναι προσαρμοσμένες μεταβλητές μου, τις δηλώσεις τους / οι ορισμοί δεν ορίζεται παρακάτω.


http://msbuildtasks.tigris.org/ και / ή https://github.com/loresoft/msbuildtasks έχει την (FileUpdate και SvnVersion) καθήκοντα.


  <Target Name="SubVersionBeforeBuildVersionTagItUp">

    <ItemGroup>
      <AssemblyInfoFiles Include="$(ProjectDir)\**\*AssemblyInfo.cs" />
    </ItemGroup>

    <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(SVNToolPath)">
      <Output TaskParameter="Revision" PropertyName="MySubVersionRevision" />
    </SvnVersion>

    <FileUpdate Files="@(AssemblyInfoFiles)"
            Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)"
            ReplacementText="$1.$2.$3.$(MySubVersionRevision)" />
  </Target>

ΕΠΕΞΕΡΓΑΣΙΑ ------------------------------------------------- -

Το παραπάνω μπορεί να ξεκινήσει την αποτυχία μετά από τον αριθμό αναθεώρησης SVN σας φτάσει 65534 ή υψηλότερη.

Βλέπω:

Απενεργοποίηση προειδοποίηση CS1607

Εδώ είναι η λύση.

<FileUpdate Files="@(AssemblyInfoFiles)"
Regex="AssemblyFileVersion\(&quot;(\d+)\.(\d+)\.(\d+)\.(\d+)"
ReplacementText="AssemblyFileVersion(&quot;$1.$2.$3.$(SubVersionRevision)" />

Το αποτέλεσμα αυτό θα πρέπει να είναι:

Στα Windows / Εξερεύνηση // Αρχείο / Ιδιότητες .......

Συνέλευση έκδοση θα είναι 1.0.0.0.

Αρχείο έκδοση θα είναι 1.0.0.333 αν 333 είναι η αναθεώρηση SVN.

Απαντήθηκε 18/09/2012 στις 18:18
πηγή χρήστη

ψήφοι
2

Με βάση την λύση skolimas έχω ενημερωθεί το σενάριο Nant για την ενημέρωση και την AssemblyFileVersion. Χάρη στην skolima τον κωδικό!

<target name="setversion" description="Sets the version number to current label.">
        <script language="C#">
            <references>
                    <include name="System.dll" />
            </references>
            <imports>
                    <import namespace="System.Text.RegularExpressions" />
            </imports>
            <code><![CDATA[
                     [TaskName("setversion-task")]
                     public class SetVersionTask : Task
                     {
                      protected override void ExecuteTask()
                      {
                       StreamReader reader = new StreamReader(Project.Properties["filename"]);
                       string contents = reader.ReadToEnd();
                       reader.Close();                     
                       // replace assembly version
                       string replacement = "[assembly: AssemblyVersion(\"" + Project.Properties["label"] + "\")]";
                       contents = Regex.Replace(contents, @"\[assembly: AssemblyVersion\("".*""\)\]", replacement);                                        
                       // replace assembly file version
                       replacement = "[assembly: AssemblyFileVersion(\"" + Project.Properties["label"] + "\")]";
                       contents = Regex.Replace(contents, @"\[assembly: AssemblyFileVersion\("".*""\)\]", replacement);                                        
                       StreamWriter writer = new StreamWriter(Project.Properties["filename"], false);
                       writer.Write(contents);
                       writer.Close();
                      }
                     }
                     ]]>
            </code>
        </script>
        <foreach item="File" property="filename">
            <in>
                    <items basedir="${srcDir}">
                            <include name="**\AssemblyInfo.cs"></include>
                    </items>
            </in>
            <do>
                    <setversion-task />
            </do>
        </foreach>
    </target>
Απαντήθηκε 12/09/2009 στις 11:03
πηγή χρήστη

ψήφοι
2

Η προσέγγισή μου είναι να χρησιμοποιήσετε την παραπάνω plugin για ccnet και μια εργασία nant ηχώ για να δημιουργήσετε ένα VersionInfo.csαρχείο που περιέχει τίποτα, αλλά αποδίδει η έκδοση. Έχω μόνο να περιλαμβάνει το VersionInfo.csαρχείο στην κατασκευή

Η ηχώ έργο εξάγει απλά το string δίνω σε ένα αρχείο.

Αν υπάρχει ένα παρόμοιο έργο MSBuild, μπορείτε να χρησιμοποιήσετε την ίδια προσέγγιση. Εδώ είναι το μικρό έργο nant μπορώ να χρησιμοποιήσω:

<target name="version" description="outputs version number to VersionInfo.cs">
  <echo file="${projectdir}/Properties/VersionInfo.cs">
    [assembly: System.Reflection.AssemblyVersion("$(CCNetLabel)")]
    [assembly: System.Reflection.AssemblyFileVersion("$(CCNetLabel)")]
  </echo>
</target>

Δοκιμάστε αυτό:

<ItemGroup>
    <VersionInfoFile Include="VersionInfo.cs"/>
    <VersionAttributes>
        [assembly: System.Reflection.AssemblyVersion("${CCNetLabel}")]
        [assembly: System.Reflection.AssemblyFileVersion("${CCNetLabel}")]
    </VersionAttributes>
</ItemGroup>
<Target Name="WriteToFile">
    <WriteLinesToFile
        File="@(VersionInfoFile)"
        Lines="@(VersionAttributes)"
        Overwrite="true"/>
</Target>

Παρακαλώ σημειώστε ότι δεν είμαι πολύ οικεία με MSBuild, έτσι ώστε το σενάριό μου μάλλον δεν θα λειτουργήσει out-of-the-box και χρειάζονται διορθώσεις ...

Απαντήθηκε 03/02/2009 στις 05:16
πηγή χρήστη

ψήφοι
1

Πρόσεχε. Η δομή που χρησιμοποιείται για τους αριθμούς κατασκευής βρίσκεται σε μικρή απόσταση, έτσι ώστε να έχουν ένα ανώτατο όριο για το πόσο ψηλά αναθεώρηση σας μπορεί να πάει.

Στην περίπτωσή μας, έχουμε ήδη υπερβεί το όριο.

Αν προσπαθήσετε να βάλετε τον αριθμό build 99.99.99.599999, η ιδιοκτησία έκδοση του αρχείου στην πραγματικότητα θα βγει ως 99.99.99.10175.

Απαντήθηκε 03/02/2009 στις 19:34
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more