2017-09-25 4 views
0

J'ai un projet multi plattform dans Xamarin. Le numéro de version de chaque projet .csproj (iOS, Android, Mac, Windows) Le numéro de version est défini à partir des options de la solution .sln.Accéder à la version à partir de la solution Xamarin

Mon problème maintenant est de récupérer le numéro de version du fichier de solution sans avoir accès aux projets individuels.

Je sais qu'il existe des solutions pour obtenir le numéro de version à partir de NSBundle dans iOS et similaire sur d'autres plateformes, mais je ne peux pas les utiliser.

EDIT: C'est la structure de ma solution appelée ETCS (git branch develop). Là, j'ai un projet ETCS qui est les fonctions fondamentales et les projets ETCS.***, un pour chaque plate-forme.

Solution Explorer

Le numéro de version est définie dans la solution où les projets obtiennent ce numéro. Voir l'image ci-dessous. Ce dont j'ai besoin est un moyen de définir un constant dans le projet de la fonction principale.

Version number setting in Project

+0

Parlez-vous de l'obtenir au cours du processus MSBuild? – SushiHangover

+0

Je ne sais pas si une telle fonction serait la compilation ou l'exécution. Ce n'est pas vraiment important pour moi, mais je crois que l'obtention de cette valeur de la solution serait au moment de la compilation. –

Répondre

0

Une solution (.sln) est un fichier texte brut, pas xml, JSON, etc .. afin que vous puissiez l'analyser comme vous le voulez.

Si vous ajoutez une version via Visual Studio pour Mac/MonoDevelop/Xamarin Studio vous retrouvez avec un GlobalSection dans le .sln de:

GlobalSection(MonoDevelopProperties) = preSolution 
     description = Sushi's Most Amazing App 
     version = 3.14 
    EndGlobalSection 
EndGlobal 

Note: La solution metaproj produite par MSBuildEmitSolution=1 ne contient pas ces informations Vous ne pouvez donc pas utiliser les fonctionnalités MSBuild intégrées pour l'analyser.

Parse la version out (en utilisant bash, mais utilisez votre propre choix à l'outil (s):..

export slnVersion=`grep "version =" SomeSolutionFile.sln | cut -f 2 -d "=" | sed -e 's/^[ \t]*//' | tr -cd "[:print:]"` 

Maintenant vous avez la version (dans une variable env dans cet exemple)

Si vous avez un fichier .cs (Global.Template) qui ressemble à ceci:

namespace MovieMadness 
{ 
    public static class Globals 
    { 
     public const string SolutionVersion = "SushiHangover"; 
    } 
} 

vous pouvez remplacer SushiHangover avec la version à base de solution:

export slnVersion=`grep "version =" SomeSolutionFile.sln | cut -f 2 -d "=" | sed -e 's/^[ \t]*//' | tr -cd "[:print:]"` 
sed -e 's/SushiHangover/'"$slnVersion"'/g' Global.template > Global.cs 
cat Global.cs 

Résultats dans:

namespace MovieMadness 
{ 
    public static class Globals 
    { 
     public const string SolutionVersion = "3.14"; 
    } 
}