我需要从正在处理的项目文件中访问 msbuild 命令行参数(特别是指定的目标和属性),以便将它们传递给 <MSBuild> 任务的属性。
我的 msbuild 文件使用了大量属性,我不知道哪些属性将通过命令行被覆盖,所以我正在寻找一种方法来传递这些属性,而无需手动将每个属性指定给属性<MSBuild> 任务。类似于 bat 文件中的 $* 变量。
我怎样才能做到这一点?
我需要从正在处理的项目文件中访问 msbuild 命令行参数(特别是指定的目标和属性),以便将它们传递给 <MSBuild> 任务的属性。
我的 msbuild 文件使用了大量属性,我不知道哪些属性将通过命令行被覆盖,所以我正在寻找一种方法来传递这些属性,而无需手动将每个属性指定给属性<MSBuild> 任务。类似于 bat 文件中的 $* 变量。
我怎样才能做到这一点?
这个问题很古老,但这里的 FWIW 是我处理获取 MSBuild 命令行参数的方式:
$([System.Environment]::CommandLine.Trim())
问题是这样在使用时会导致如下错误dotnet build
。
“MSB4185:类型“System.Environment”的函数“CommandLine”不可作为 MSBuild 属性函数执行。
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>