9

I need to get access to the msbuild command line parameters (the specified targets and properties in particular) from within the project file being processed in order to pass them down to the Properties of an <MSBuild> task.

My msbuild file uses a large number of properties, and I don't know ahead of time which ones will be overridden via the command line, so I'm looking for a way to pass these down without specifying each one manually to the Properties of the <MSBuild> task. Something like the $* variable in a bat file.

How can I accomplish this?

arathorn
  • 2,098
  • 3
  • 20
  • 29
  • Did you find anything else about this? I am at your exact same position... I need to call nuget.exe from inside a target and I wanted to pass along whatever properties were set from the outside. – julealgon Jan 28 '15 at 11:50
  • Me too.. I can get the value when using TFS build but not from VS using a publish profile.. – SAS Apr 08 '15 at 14:10

1 Answers1

0

This question is ancient, but FWIW here is how I have handled getting the MSBuild command line parameters:

Option 1 (not recommended)

$([System.Environment]::CommandLine.Trim())

The problem is that this will cause the following error when using dotnet build.

'MSB4185: The function "CommandLine" on type "System.Environment" is not available for execution as an MSBuild property function.'

Option 2 (FTW)

Create a Task

using System;
using System.Linq;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;

public sealed class GetCommandLineArgs : Task {
    [Output]
    public ITaskItem[] CommandLineArgs { get; private set; }

    public override bool Execute() {
        CommandLineArgs = Environment.GetCommandLineArgs().Select(a => new TaskItem(a)).ToArray();
        return true;
    }
}

Use the Task to create an Item for each argument

<GetCommandLineArgs>
  <Output TaskParameter="CommandLineArgs" ItemName="CommandLineArg" />
</GetCommandLineArgs>

Optionally, reconstruct the arguments into a single string

<PropertyGroup>
  <CommandLineArgs>@(CommandLineArg, ' ')</CommandLineArgs>
<PropertyGroup>
weir
  • 4,521
  • 2
  • 29
  • 42