2017-09-25 4 views
0

Xamarinにマルチプラフォームプロジェクトがあります。各.csprojプロジェクトのバージョン番号(iOS、Android、Mac、Windows)バージョン番号は、.slnソリューションオプションから設定します。Xamarin Solutionからのアクセスバージョン

私の問題は、個々のプロジェクトにアクセスすることなく、ソリューションファイルからバージョン番号を取得することです。

バージョン番号をiOSなどのバージョンNSBundleから取得する解決策があることは知っていますが、私はそれらを使用できません。

EDIT:ETCSと呼ばれる私のソリューションの構造です(gitブランチが開発されました)。そこに私は中心のfuntionsであるプロジェクトETCSと各プラットフォームのためのプロジェクトETCS.***を持っています。

Solution Explorer

バージョン番号は、プロジェクトがその番号を取得する場所から、溶液中で設定されています。下の画像を参照してください。私が必要とするのは、コア機能プロジェクトにconstantを設定する方法です。

Version number setting in Project

+0

あなたはMSBuildのプロセスの間にそれを得ることについて話していますか? – SushiHangover

+0

私はそのような関数がコンパイル時間か実行時間かどうかわかりません。それは私にとって重要なことではありませんが、ソリューションの価値をコンパイル時に得ることができると信じています。 –

答えて

0

溶液(.slnは)など、プレーンテキストファイル、ノーXML、JSON、..ですので、あなたはしかし、あなたが望むそれを解析することができます。

あなたは、Mac/MonoDevelopの/ Xamarin Studio用のVisual Studio経由でバージョンを追加する場合は、の.slnGlobalSectionで終わる:

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

注:MSBuildEmitSolution=1を経て製造ソリューションmetaprojは、この情報が含まれていません、組み込みのMSBuild機能を使用して解析することはできません。

は、ここにはbashを使用して(アウトバージョンを解析しますが、ツール(複数可)にご自身の選択を使用します。

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

は今、あなたはENVに(バージョンを持っている。この例では変数)を

。あなたが .csファイルがある場合

Global.Templateは)それは次のようになります。

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

あなたはソリューションベースのバージョンとSushiHangoverを置き換えることができます:

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 

結果で:

namespace MovieMadness 
{ 
    public static class Globals 
    { 
     public const string SolutionVersion = "3.14"; 
    } 
} 
関連する問題