2015-12-18 12 views
4

Dans un projet C# construit avec VS2013, je pourrais mettre cela dans le fichier AssemblyInfo.cs:AssemblyInformationalVersion changement de comportement d'attribut: délibéré ou un bogue?

[assembly: AssemblyInformationalVersion("7.1.0.0 Private (Debug build)")] 

Quand je l'API .NET FileVersionInfo.GetVersionInfo contre l'exécutable à partir d'un autre projet, je trouve ces valeurs rapporté:

  • Version du produit: 7.1.0.0 privée (Debug)
  • ProductMajorPart: 7
  • ProductMinorPart: 1

Lorsque j'utilise le même attribut et la même valeur de chaîne dans un projet C# construit avec VS2015, les propriétés ProductMajorPart et ProductMinorPart sont signalées comme zéro!

Est-ce que quelqu'un sait si le changement de comportement est intentionnel?

J'ai examiné les informations binaires version de fichier trouvé dans les executables, et tandis que les valeurs de chaîne dans les informations de version sont comme prévu dans les deux fichiers, le fichier exécutable VS2015 a zéro des valeurs dans les champs de VS_FIXEDFILEINFO.dwProductVersionMS et VS_FIXEDFILEINFO.dwProductVersionLS.

+0

Cela a été pris en charge par l'éditeur de liens d'assemblage, alink.dll. Plus maintenant, c'est maintenant fait par Roslyn. Beaucoup, * beaucoup * de bugs, cliquez sur le bouton "New Issue" sur [cette page web] (https://github.com/dotnet/roslyn/issues). –

+0

Merci pour la réponse. Je suppose que nous allons décoder les composants du produit (majeur, mineur) manuellement à partir de maintenant. Tant pis... –

Répondre

1

Je peux confirmer le changement de comportement pour ce cas, avec l'observation que si le AssemblyInformationalVersion est au format canonique, par exemple "7.1.0.0" alors il fonctionne comme prévu dans toutes les versions ie les champs version majeure/mineur/build/révision de produit . sont remplis

pour le fond, le docs for AssemblyInformationalVersion font en effet préciser que:

l'attribut défini par cette classe attache les informations de version supplémentaire à un assemblage. Si cet attribut est appliqué à un assembly, la chaîne qu'il spécifie peut être obtenue lors de l'exécution à l'aide de la propriété Application.ProductVersion.

[...] Bien que vous pouvez spécifier un texte, un message d'avertissement apparaît sur la compilation si la chaîne est pas dans le format utilisé par le numéro de version de montage [...]

De ce qui précède :

  • il n'y a aucune garantie formelle autre que la chaîne lui-même peut être récupéré;

  • Il existe une mise en garde contre l'utilisation de chaînes au format libre.

Vous pouvez, ou même devrait, déposer un rapport de bogue sur VS connect si mon sentiment est que MS voit les chaînes de format libre dans AssemblyInformationalVersion comme non pris en charge caractéristique « accidentelle », et pourrait ne pas envisager un changement de comportement en situation irrégulière être un "bug" propre.

Non directement lié, mais ce rapport de bogue VS 2010 Localized build with free form AssemblyInformationalVersion causes ALINK warning AL1053 a été fermé par MS en tant que won't fix.

Aussi la réponse acceptée à Why is warning CS1607 “The version specified for the 'product version' is not in the normal 'major.minor.build.revision' format” generated? conseille essentiellement qu'une fois que vous déviez du format standard major.minor.build.revision, vous êtes à peu près seul.