Stephan
Stephan

Reputation: 2039

Set output path for MSBuild task

In the following simple MSBuild file I'd like to overwrite the output path that is defined in the .sln or .csproj file. In line 13 you can see that I call an MSBuild task for an existing VS solution. Usually, the projects that are part of that solution have a property where the output is stored. With my script I'd like to overwrite that so that my "build automation" uses a different directory than the default one.

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

    <PropertyGroup>
        <appname>Some App</appname>
        <version>2.9.1</version>
        <file_xap>Some.App.WP8_$(version).$([System.DateTime]::Now.ToString(`yyyyMMddHHmmss`)).xap</file_xap>
    </PropertyGroup>

    <Target Name="Default">

        <MSBuild Projects="C:\Users\User\Documents\Visual Studio 2013\Projects\SomeApp\SomeApp.sln" Properties="Configuration=Debug;Platform=Any CPU">
        </MSBuild>
        <Message Text="Output file: $(file_xap)"/>
    </Target>
</Project>

So the actual question is: How can I call MSBuild for that sln in a way that the output (the xap-file in that case) to another directory (having all the output apart from the xap-file is fine as well)?

Upvotes: 3

Views: 4043

Answers (1)

MBH
MBH

Reputation: 16639

I will post my full xml here so you can understand it all the structure of the project is like this:

MyProject----MyProject.sln
         ----MyProject.Server---    
                        ----MyProject.Server.proj
                        ----Other server project classes and stuff
         ----MyProject.Client---
                        ----MyProject.Client.proj
                        ----Client project related stuff
         ----BuildFromXmlFldr---
                                ----build_both_proj.xml <---This is the example file i posted here

Here is the build_both_proj.xml

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003"
        ToolsVersion="4.0"
        DefaultTargets="Build">
    <PropertyGroup>
        <SolutionDir>..\</SolutionDir>

        <ServerProjectFile>..\MyProject.Server\MyProject.Server.csproj</ServerProjectFile>
        <ClientProjectFile>..\MyProject.Client\MyProject.Client.csproj</ClientProjectFile>

        <ServerProjectName>MyProject.Server</ServerProjectName>
        <ClientProjectName>MyProject.Client</ClientProjectName>

        <ServerOutput>C:\_Publish\Server\</ServerOutput>
        <ClientOutput>C:\_Publish\Client\</ClientOutput>

        <Configuration Condition=" '$(Configuration)' == '' ">Release</Configuration>
        <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    </PropertyGroup>


    <Target Name="BuildServer">
        <MSBuild Projects="$(ServerProjectFile)" 
        Targets="Build"
        Properties="Configuration=$(Configuration);Platform=$(Platform);OutputPath=$(ServerOutput);">
        </MSBuild>

    </Target>

    <Target Name="BuildClient">
        <MSBuild Projects="$(ClientProjectFile)" 
        Targets="Build"
        Properties="Configuration=$(Configuration);Platform=$(Platform);OutputPath=$(ClientOutput);"
        StopOnFirstFailure="true">
        </MSBuild>
    </Target>




    <PropertyGroup>
        <BuildAllDependsOn>BuildServer;BuildClient</BuildAllDependsOn>
    </PropertyGroup>

    <Target Name="BuildAll" DependsOnTargets="$(BuildAllDependsOn)"/>
</Project>

This is the msbuild.exe command inside the folder BuildFromXmlFldr that I used:

c:\path_to_msbuild\MSBuild.exe build_both_proj.xml /t:BuildAll

so the output is determined in the Properties attribute in the Target tag

Properties="Configuration=$(Configuration);Platform=$(Platform);OutputPath=$(ServerOutput);"

Upvotes: 1

Related Questions