2011-03-15 5 views
4

Comment utiliser les tâches nant pour incrémenter des versions de build? Pour être plus précis, comment puis-je lier ceci avec les numéros de version dans assemblyinfo.cs?nant <version> tâche

Répondre

8

Vous devez envisager un système de gestion des incréments de version. Une manière courante de le faire est par l'intégration continue telle que CruiseControl.NET. Si vous allez dans cette voie, vous pouvez utiliser une cible de construction comme celui-ci:

<target name="set.version" description="generates the version number"> 
    <echo message="Setting the build version to ${CCNetLabel}..." /> 
    <attrib file="AssemblyInfo.cs" readonly="false" /> 
    <asminfo output="AssemblyInfo.cs" language="CSharp"> 
     <imports> 
      <import namespace="System" /> 
      <import namespace="System.Reflection" /> 
     </imports> 
     <attributes> 
      <attribute type="AssemblyVersionAttribute" value="${CCNetLabel}" /> 
      <attribute type="AssemblyFileVersionAttribute" value="${CCNetLabel}" /> 
     </attributes> 
    </asminfo> 
    <attrib file="AssemblyInfo.cs" readonly="true" /> 
</target> 

Où CCNetLabel est une propriété dynamique qui est définie à partir CruiseControl quand il exécute Nant.

+1

C'est génial! Mais je ne comprends pas très bien quand implémenter ceci dans mon script? Dois-je effectuer ceci avant que le BUILD/COMPILE se produise réellement? Cet exemple produit simplement un fichier "AssemblyInfo.cs". Comment puis-je l'obtenir pour utiliser les fichiers AssemblyInfo.cs existants dans ma solution? J'en ai beaucoup. – D3vtr0n

+1

Cela doit être fait avant que la cible de compilation ne se produise. La meilleure façon d'utiliser cela dans une solution avec de nombreux fichiers AssemblyInfo.cs existants consiste à isoler les attributs de version et d'autres informations communes pour votre solution (AssemblyVersion, Company, etc.) dans un fichier "GlobalAssemblyInfo.cs" inclus dans tous les fichiers. les projets pour votre solution. Vous pouvez modifier la tâche asminfo ci-dessus pour modifier ce fichier à la place. –

+0

^Qui a totalement fonctionné. Merci! – D3vtr0n

3

Nous utilisons TeamCity pour fournir à NAnt un numéro de version. Le numéro de version est ensuite injectée dans le AssemblyInfo comme celui-ci .:

<asminfo output="${solutionDir}/CommonAssemblyInfo.cs" language="CSharp"> 
     <imports> 
     <import namespace="System" /> 
     <import namespace="System.Reflection" /> 
     </imports> 
     <attributes> 
     <attribute type="AssemblyVersionAttribute" value="${version}" /> 
     </attributes> 
    </asminfo> 

Cela crée un fichier CommonAssemblyInfo.cs avec la version spécifiée, qui doit être lié à tous les projets de votre solution.

2

J'utilise plusieurs projets référencés (Windows Forms, Bibliothèque de classes et BatchConsole)

meilleur exemple sera de copier la « section de AssemblyInfo » de NANT Créer fichier (vous pouvez le télécharger à partir Github)

L'astuce est que vous pouvez utiliser un fichier commonAssemblyinfo auquel vos cibles nAnt se référeront.

Ci-dessous la cible du fichier NANT

<target name="create-common-assemblyinfo" if="${create.assemblyinfo}"> 
    <!-- ensure src/CommonAssemblyInfo.cs is writable if it already exists --> 
    <attrib file="src/CommonAssemblyInfo.cs" readonly="false" if="${file::exists('src/CommonAssemblyInfo.cs')}" /> 
    <!-- generate the source file holding the common assembly-level attributes --> 
    <asminfo output="src/CommonAssemblyInfo.cs" language="CSharp"> 
     <imports> 
      <import namespace="System" /> 
      <import namespace="System.Reflection" /> 
      <import namespace="System.Runtime.InteropServices" /> 
     </imports> 
     <attributes> 
      <attribute type="ComVisibleAttribute" value="false" /> 
      <attribute type="CLSCompliantAttribute" value="true" /> 
      <attribute type="AssemblyTitleAttribute" value="NAnt" /> 
      <attribute type="AssemblyDescriptionAttribute" value="A .NET Build Tool" /> 
      <attribute type="AssemblyConfigurationAttribute" value="${project.release.type}" /> 
      <attribute type="AssemblyCompanyAttribute" value="http://nant.sourceforge.net" /> 
      <attribute type="AssemblyProductAttribute" value="NAnt" /> 
      <attribute type="AssemblyCopyrightAttribute" value="Copyright (C) 2001-${datetime::get-year(datetime::now())} Gerry Shaw" /> 
      <attribute type="AssemblyTrademarkAttribute" value="" /> 
      <attribute type="AssemblyCultureAttribute" value="" /> 
      <attribute type="AssemblyVersionAttribute" value="${project.version}.${build.number}.0" /> 
      <attribute type="AssemblyInformationalVersionAttribute" value="${project.version}" /> 
     </attributes> 
    </asminfo> 
</target> 
Questions connexes