2017-09-25 92 views
0

我在Xamarin有一個多plattform項目。每個.csproj項目的版本號(iOS,Android,Mac,Windows)版本號由.sln解決方案選項設置。從Xamarin解決方案訪問版本

我現在的問題是從解決方案文件中檢索版本號而無法訪問單個項目。

我知道有一些解決方案可以從iOS中獲得類似NSBundle的版本號,並且在其他平臺中類似,但我無法使用這些版本號。

編輯:這是我的解決方案的結構,名爲ETCS(git branch develop)。在那裏我有一個項目ETCS這是核心功能和項目ETCS.***,每個平臺一個。

Solution Explorer

的版本號是從哪裏得到的項目,這個數字解決方案集。見下圖。我需要的是在覈心功能項目中設置constant的方法。

Version number setting in Project

+0

你說的是在MSBuild的過程中得到它? – SushiHangover

+0

我不知道這樣的函數是編譯時間還是運行時間。這對我來說並不重要,但我相信從解決方案中獲得該價值將在編譯時。 –

回答

0

溶液(.sln)是一個純文本文件,沒有XML,JSON,等等。所以你可以分析你想要的東西。

如果添加通過Visual Studio中的一個版本的Mac/MonoDevelop的/ Xamarin Studio中,最終在.sln的一個GlobalSection

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"; 
    } 
} 
相關問題