2009-07-27 7 views
33

Nous avons la convention de versioning de nos versions en tant que [majeur]. [Mineur]. [Micro]. [Révision], par ex. 2.1.2.33546..NET: numéros de révision importants dans AssemblyVersionAttribute

Notre-build script met à jour automatiquement un fichier contenant AssemblyInfo.cs

[assembly: AssemblyVersion("x.y.z.w")] 

afin de pouvoir incorporer la version numéro dans l'assemblée. Mais notre dépôt Subversion vient d'atteindre la révision # 65535, qui a brisé notre build.

Il s'avère que chaque numéro du numéro de version a une valeur maximale de 65534 (probablement en raison d'une restriction Windows).

Avez-vous rencontré ce problème? Toutes les bonnes solutions/solutions de contournement?

Nous aimons le schéma d'intégration de la révision numéro et nous ne pouvons pas réinitialiser évidemment notre serveur Subversion :-)

Répondre

36

Un peu plus d'informations générales:

Why are build numbers limited to 65535?

Comme il est peu probable pour se changer, vos options sont:

  • Prenez la révision Modulo 65535, ce qui signifie que vous êtes de retour à 1
  • Utilisez le micro-champ dans votre numéro de version pour diviser le numéro de version en divisant la révision par 1000. Cela signifie que votre version pourrait être 1.0.65.535
  • Ne stockez pas la révision SVN dans AssemblyVersion, mais dans le AssemblyInformationalVersion. Révision
  • Ne stockez pas la révision SVN dans AssemblyVersion, mais dans les champs AssemblyProduct ou AssemblyDescription de façon à ce que votre application puisse toujours y accéder à des fins d'affichage. Encore une fois, votre application peut toujours y accéder, mais Explorer va maintenant l'afficher dans la feuille de propriétés.
+5

Si vous le placez dans AssemblyInformationalVerison, vous pouvez le voir dans Windows Explorer sous la propriété "Version du produit". Donc c'est une bonne option. – xagyg

9

Une option pourrait consister à simplement utiliser le [AssemblyFileVersion]; cela soulève encore un avertissement, mais il va construire, au moins:

[assembly: AssemblyFileVersion("1.0.0.80000")] 
+4

Ceci a été corrigé dans les versions ultérieures de msbuild (4.0), et ne donne plus d'avertissement. – JoshSchlesinger

4

According to MSDN, les composants du numéro de version AssemblyVersionAttribute sont limités à UInt16.MaxValue - 1par les méta-données d'assemblage, à savoir que vous ne pouvez pas stocker plus numéros dans un fichier d'assemblage. La version du fichier, comme le suggère Marc Gravell, pourrait vous suffire, en fonction de qui lira votre numéro de version.

6

Nous avons décidé d'utiliser la même convention, et en raison des limitations des numéros de version Windows, nous avons choisi de supprimer la partie «micro» de nos numéros de version afin de conserver le numéro de révision. Nos numéros de version sont maintenant [major].[minor].[revision/10000].[revision % 10000], donc les assemblys construits à partir de la révision 65535 ont la version 2.01.6.5535.

+0

J'aime cela +1, comment injectez-vous la valeur dans AssemblyInfo.cs? –

+9

Assurez-vous de ne pas utiliser de "mises à jour mineures" dans Windows Installer si vous faites cela (c.-à-d.mise à niveau qui évite la désinstallation/réinstallation complète). L'installateur de Windows ignorera complètement le composant de la 4ème version. Si vous ne mettez plus manuellement à jour le composant de la version 3 pour refléter les versions, le programme d'installation de Windows peut ne pas mettre à jour certains fichiers. –

+2

@Ray Hayes: Notre script de construction NAnt utilise 'svn info. --xml' pour obtenir le numéro de révision de la copie de travail, puis appelle un utilitaire personnalisé pour afficher cette révision dans un fichier "SolutionInfo.cs" contenant un attribut [AssemblyVersion]. Ce fichier n'est pas ajouté à Subversion, mais est simplement référencé par tous les projets (utilisez "Ajouter comme lien" dans VS) dans la solution, de sorte qu'ils sont tous construits avec le dernier numéro de version. –

Questions connexes