Как получить доступ к параметрам командной строки msbuild из обрабатываемого файла проекта? - PullRequest
9 голосов
/ 16 июля 2010

Мне нужно получить доступ к параметрам командной строки msbuild (в частности, к указанным целям и свойствам) из обрабатываемого файла проекта, чтобы передать их в свойства задачи .

Мой файл msbuild использует большое количество свойств, и я не знаю заранее, какие из них будут переопределены через командную строку, поэтому я ищу способ передать их без указания каждого из них вручную Свойства задачи . Что-то вроде переменной $ * в файле bat.

Как мне это сделать?

1 Ответ

0 голосов
/ 05 сентября 2018

Этот вопрос древний, но вот как я справился с получением параметров командной строки MSBuild:

Вариант 1 (не рекомендуется)

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

Проблема заключается в том, что это приведет к следующей ошибке при использовании dotnet build.

'MSB4185: функция «CommandLine» типа «System.Environment» недоступна для выполнения как функция свойства MSBuild. '

Вариант 2 (FTW)

Создание задачи

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;
    }
}

Использование задачи для создания элемента для каждого аргумента

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

При желании можно восстановить аргументы в одну строку

<PropertyGroup>
  <CommandLineArgs>@(CommandLineArg, ' ')</CommandLineArgs>
<PropertyGroup>
...