2017-09-25 95 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"; 
    } 
} 
相关问题