2

アイテムをプロパティにフラット化するにはどうすればよいですか?

このMSDNページ(セクションConversions between Strings and Item Listsによると、アイテムを値としてプロパティを宣言するだけです。

しかし、実際の練習は完全に反対であることがわかりました。このプロジェクトを MSBuild 4.0 で実行すると、ターゲットを指定してinstall...

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(Project-to-import)" Condition="'$(Project-to-import)' != ''" />

  <ItemGroup>
    <RuntimeProj    Include="C:\TEMP\Design.proj" />
    <DesigntimeProj Include="C:\TEMP\Run.dproj" />
  </ItemGroup>

  <PropertyGroup> <!-- Flatten out the items to properties. -->
    <RuntimeProj>@(RuntimeProj)</RuntimeProj>
     <!-- ^ This bit doesn't work. MS documentation is wrong? -->
    <DesigntimeProj>@(RuntimeProj)</DesigntimeProj>
  </PropertyGroup>

  <Target Name="install">
    <Message Text="Hello world!"/>
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="BuildRunPackage"   
             Properties="Project-to-import=$(RuntimeProj)" />
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="BuildDesignPackage"
             Properties="Project-to-import=$(DesigntimeProj)" />
  </Target>

  <Target Name="BuildRunPackage">
    <CallTarget Targets="Clean" /> 
    <CallTarget Targets="Build" /> 
  </Target>

  <Target Name="BuildDesignPackage">
    <CallTarget Targets="Clean" /> 
    <CallTarget Targets="Make" /> 
    <CallTarget Targets="Register" />
  </Target>
<.Project>

... エラーが返されます ...

エラー MSB4012: 式 "Project-to-import=@(RuntimeProj) は、このコンテキストでは使用できません。アイテム リストは、アイテム リストが必要な他の文字列と連結できません。セミコロンを使用して、複数のアイテム リストを区切ります。

4

1 に答える 1