2012-01-16 19 views
10

私はMasterVersionと呼ばれる次の文字列を持っている:MSBuild 4で文字列を複数の文字で分割する方法は?

1.1-SNAPSHOT 

私はでそれを分割する必要があります。そして - それはstring[]配列、すなわち、SplitVersionと呼ばれるようになります。私は私がいない喜びで、以下のダースのバリエーションについてを含むと考えることができるすべてを試してみた

1 
1 
SNAPSHOT 

<!-- doesn't work --> 
<ItemGroup> 
    <VersionDelimiters Include="." /> 
    <VersionDelimiters Include="-" /> 
    <SplitVersion Include="$(MasterVersion.Split(@VersionDelimiters))" /> 
</ItemGroup> 

<!-- doesn't work either --> 
<ItemGroup> 
    <SplitVersion Include="$(MasterVersion.Split([`.`; `-`]))" /> 
</ItemGroup> 

どのようなわかりにくいMSBuildの構文がありませんかmuckingですか?

答えて

12

へのMSBuild 4.0プロパティ関数は、配列を扱うことができない変更する必要があなたは

Split(`,`, `-`) 

を行う際に、しかし、あなたが呼び出しています配列が必要なString.Split(params string[])のオーバーロード(C#でもparamsキーワードを使用すると、シーンの背後に配列が作成され、内部でSplit(new string[] { ',', '-' })のようなことが起こります)。あなたは何ができるか

は以下の通りです:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" 
ToolsVersion="4.0"> 

    <PropertyGroup> 
     <MasterVersion>1.1-SNAPSHOT</MasterVersion> 
    </PropertyGroup> 

    <ItemGroup> 
     <SplitVersion Include="$(MasterVersion.Replace(`-`, `.`).Split(`.`))" /> 
    </ItemGroup> 

    <Target Name="Test"> 
     <Message Importance="high" Text="@(SplitVersion)"/> 
    </Target> 
</Project> 

それとも、最初に分割するために渡される(文字列)の配列を作成することができます。この場合は本当に良いとは限りません

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0"> 
    <PropertyGroup> 
     <MasterVersion>1.1-SNAPSHOT</MasterVersion> 
     <Delimiters>.;-</Delimiters> 
     <DelimitersArray>$(Delimiters.Split(`;`))</DelimitersArray> 
    </PropertyGroup> 
    <ItemGroup> 
     <SplitVersion Include="$(MasterVersion.Split($(DelimitersArray)))" /> 
    </ItemGroup> 
    <Target Name="Test"> 
     <Message Importance="high" Text="@(SplitVersion)"/> 
    </Target> 
</Project> 

;-)

ああ、より有用な情報については、this MSDN blog entrをご覧ください。

1

おそらく

<ItemGroup> 
    <SplitVersion Include="$(MasterVersion.Split('.','-'))" /> 
</ItemGroup> 

(MSBuildのアレイにこれを自動変換する必要があります)

+0

エラーを示します。 –

+0

エラーは何ですか? –

+0

'エラーMSB4184:式" 1.1-SNAPSHOT ".Split(。、 - )は評価できません。入力文字列を使用すると、Include'は、プロパティの属性 '持つことができないため、解析しません正しいformat.' –

-1

あなたはItemGroup以内にこの表現を使っているが、ItemGroupsは、ビルドのために必要な成果物を収集するために使用されています。私はあなたがプロパティは$(ドル記号)を使用して、MSBuildの中で参照されていることを覚えておいてください。この

<PropertyGroup> 
    <MasterVersion>1.1-SNAPSHOT</MasterVersion> 
    <SplitVersion Include="$(MasterVersion.Split(`.`,`-`)" /> 
</PropertyGroup> 

のようなPropertyGroup

何かを探していると思います。項目は、@(記号で)を使用して参照されます。

MasterVersionのグループに応じて、あなたは、(うまく基本的には)$ @

+0

ではありませんでした。 –

+0

$のようにそれを使用するときにはいthatsの権利、それが動作するはずです(MasterVersioin.Split(「 『』 - 」)

+0

それが閉鎖を欠けているすべてのいいえ、しないのファースト。 『)』配列のサポートについての私の答えを見てください。 –

関連する問題