2017-06-23 14 views
1

versionNameからversionCodeを自動的に生成したいと考えています。 すべてのドットを削除したいです。MSBuildでxmlファイルを検索して置換する

:私はfollwoing BeforeBuildターゲットを追加しましたVSのcsprojファイル内だから、00交換 にXをtackeling始めました> 2050020

- と2.05.X.20からだから、00の

としてXに置き換わりますこれの出力は私が

を試してみた

<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="$(FoundVersionName)" android:versionName="2.05.X.20" android:installLocation="auto" package="mtdata_taxi_tablet.mtdata_taxi_tablet"> 

のように見えますが

<Target Name="BeforeBuild"> 
     <!-- find the versionName in the file --> 
     <XmlPeek XmlInputPath="Properties\AndroidManifest.xml" Namespaces="&lt;Namespace Prefix='android' Uri='http://schemas.android.com/apk/res/android' /&gt;" Query="manifest/@android:versionName"> 
     <Output TaskParameter="Result" ItemName="FoundVersionName" /> 
     </XmlPeek> 

     <!-- write the replaced versioncode to the file --> 
     <XmlPoke XmlInputPath="Properties\AndroidManifest.xml" Namespaces="&lt;Namespace Prefix='android' Uri='http://schemas.android.com/apk/res/android' /&gt;" Query="manifest/@android:versionCode" 
      Value="$([System.String]::Copy($(FoundVersionName)).Replace('X','00')) "    /> 
    </Target> 

  • $([可能System.String] ::コピー($ {FoundVersionName})。) 'X'、 '00'(交換)
  • $([可能System.String] ::コピー($(FoundVersionName) ( 'X'、 '00'))
  • $([System.String] :: Copy($ X)、00))
  • $([System。文字列] :: Copy(@FoundVersionName).Replace( 'X'、 '00'))
  • $([System.String] :: Copy(FoundVersionName).Replace( 'X'、 '00'))

ただし、いずれも機能しません。

私は

  • $(FoundVersionName)

アンドロイドを使用している場合:versionCodeは2.05.X.20

任意の考えに置き換えていますか?

答えて

2

置き換えに使用した構文は正しいですが、$()構文でアクセスできる「プロパティ」が必要です。しかし、あなたの<XmlPeek>タスクはアイテムを返すように設定されています。あなたはありがとう

<Output TaskParameter="Result" PropertyName="FoundVersionName" /> 
+0

<Output TaskParameter="Result" ItemName="FoundVersionName" /> 

を置き換えることによって、これを変更することができます!それはそれだった。 – clogwog

関連する問題