开发者

How to access the msbuild command line parameters from within the project file being processed?

I need to get access to the msbuild command line parameters (t开发者_如何学JAVAhe 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?


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>
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜