2016-11-20 16 views
0

プロパティを持つすべてのプロジェクトファイルに対してmsbuildタスクを呼び出そうとしています。ハードコーディングされた構成とプラットフォームの組み合わせで、msbuildタスクを4回呼び出します。プロパティをMSBUILDに渡すタスク

<MSBuild Projects="$(MSBuildProjectFile)" Targets="Build" Properties="Configuration=Debug;Platform=Win32" BuildInParallel="true"/> 
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Build" Properties="Configuration=Debug;Platform=x64" BuildInParallel="true"/> 
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Build" Properties="Configuration=Release;Platform=Win32" BuildInParallel="true"/> 
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Build" Properties="Configuration=Release;Platform=x64" BuildInParallel="true"/> 

のようなものしかし、私はこの

Configuration=%(BUILD_CONFIG.Identity);Platform=%(BUILD_PLATFORM.Identity) 

コードサンプル MyProject.vcxproj

<?xml version="1.0" encoding="utf-8"?> 
<Project DefaultTargets="BuildAll" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<Import Project="BuildAllConfiguration.vcxproj"/> 
<ItemGroup Label="ProjectConfigurations"> 
    <ProjectConfiguration Include="Debug|Win32"> 
     <Configuration>Debug</Configuration> 
     <Platform>Win32</Platform> 
    </ProjectConfiguration> 
    <ProjectConfiguration Include="Release|Win32"> 
     <Configuration>Release</Configuration> 
     <Platform>Win32</Platform> 
    </ProjectConfiguration> 
    <ProjectConfiguration Include="Debug|x64"> 
     <Configuration>Debug</Configuration> 
     <Platform>x64</Platform> 
    </ProjectConfiguration> 
    <ProjectConfiguration Include="Release|x64"> 
     <Configuration>Release</Configuration> 
     <Platform>x64</Platform> 
    </ProjectConfiguration> 
    </ItemGroup> 
    <PropertyGroup Label="Globals"> 
    <ProjectGuid>{E6B6F967-3BE3-428F-9288-3F838B8E726A}</ProjectGuid> 
    <Keyword>Win32Proj</Keyword> 
    <RootNamespace>MyProject</RootNamespace> 
    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion> 
    </PropertyGroup> 
    <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> 
    <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> 
    <ConfigurationType>DynamicLibrary</ConfigurationType> 
    <UseDebugLibraries>true</UseDebugLibraries> 
    <PlatformToolset>v140</PlatformToolset> 
    <CharacterSet>Unicode</CharacterSet> 
    </PropertyGroup> 
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> 
    <ClCompile> 
     <PrecompiledHeader> 
     </PrecompiledHeader> 
     <WarningLevel>Level3</WarningLevel> 
     <Optimization>Disabled</Optimization> 
     <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions> 
     <SDLCheck>true</SDLCheck> 
    </ClCompile> 
    <Link> 
     <SubSystem>Windows</SubSystem> 
     <GenerateDebugInformation>true</GenerateDebugInformation> 
    </Link> 
    </ItemDefinitionGroup> 
... 
Similar Configuration Details for release and Platforms x64 

このプロジェクトファイルはBuildAllConfiguration.vcxproj

を含んようItemGroupのものとして、このプロパティを提供したいです
<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <BUILD_PLATFORMS>Win32;x64</BUILD_PLATFORMS> 
    <BUILD_CONFIGURATION>Debug;Release</BUILD_CONFIGURATION> 
    </PropertyGroup> 
    <Target Name="BuildAll"> 
    <ItemGroup>  
     <CONFIGURATION Include="$(BUILD_CONFIGURATION.Split(';'))"/> 
     <PLATFORM Include="$(BUILD_PLATFORMS.Split(';'))"/> 
     <ProjectToBuild Include="$(MSBuildProjectFile)"> 
     <Properties>Configuration=%(CONFIGURATION.Identity);Platform=%(PLATFORM.Identity)</Properties> 
     <Targets>Build</Targets> 
     </ProjectToBuild> 
    </ItemGroup> 
    <Message Text="MSBUILD TASK input @(ProjectToBuild)"/> 
    <MSBuild Projects="@(ProjectToBuild)" /> 
</Target> 
</Project> 

このプロジェクトでは、ターゲットビルドとプロパティが正しく作成されていないMyProject.vcxprojが呼び出されます。私の予想では、性質が

Properties=Configuration=Debug;Platform=Win32 
Properties=Configuration=Release;Platform=Win32 
Properties=Configuration=Debug;Platform=x64 
Properties=Configuration=Release;Platform=x64 

代わりにプロパティが

Properties=Configuration=Debug;Platform= 
Properties=Configuration=Release;Platform= 
Properties=Configuration=;Platform=Win32 
Properties=Configuration=;Platform=x64 

答えて

0

を次のように渡されますが、answersの多くを見つける必要があり、そのためにあなたが検索する場合は、ここでは、クロス製品を必要とするが、次のように行くことです私はあなたがそれが見つけにくいかもしれないと呼ばれているのか分からないのではないかと推測しています。このようなもの:

<Target Name="BuildAll"> 
    <ItemGroup> 
    <CONFIGURATION Include="$(BUILD_CONFIGURATION.Split(';'))"/> 
    <PLATFORM Include="$(BUILD_PLATFORMS.Split(';'))"/> 

    <!-- cross product of both --> 
    <ConfigAndPlatform Include="@(CONFIGURATION)"> 
     <Platform>%(PLATFORM.Identity)</Platform> 
    </ConfigAndPlatform> 

    <ProjectToBuild Include="$(MSBuildProjectFile)"/> 
    </ItemGroup> 
    <MSBuild Projects="@(ProjectToBuild)" Properties="Configuration=%(ConfigAndPlatform.Identity);Platform=%(ConfigAndPlatform.Platform)" /> 
</Target> 

いくつかの注意点:首都は物を読むのが難しく、おそらくそれらを使用しないでしょうか?また、PropertyGroupの代わりにItemGroupに設定/プラットフォームを置く場合、余分な分割ロジックは不要です:

<ItemGroup> 
    <Configuration Include="Debug;Release"/> 
    <Platform Include="Win32;x64"/> 
<ItemGroup>