如何从正在处理的项目文件中访问msbuild命令行参数?

如何从正在处理的项目文件中访问msbuild命令行参数?,msbuild,project,command-line-arguments,msbuild-4.0,Msbuild,Project,Command Line Arguments,Msbuild 4.0,我需要从正在处理的项目文件中访问msbuild命令行参数(特别是指定的目标和属性),以便将它们传递给任务的属性 我的msbuild文件使用了大量属性,而且我事先不知道哪些属性将通过命令行被重写,因此我正在寻找一种方法,将这些属性向下传递,而无需手动将每个属性指定给任务的属性。类似于bat文件中的$*变量 如何实现这一点?这个问题由来已久,但FWIW下面是我如何处理获取MSBuild命令行参数的问题: 备选方案1(不推荐) $([System.Environment]::CommandLine.T

我需要从正在处理的项目文件中访问msbuild命令行参数(特别是指定的目标和属性),以便将它们传递给任务的属性

我的msbuild文件使用了大量属性,而且我事先不知道哪些属性将通过命令行被重写,因此我正在寻找一种方法,将这些属性向下传递,而无需手动将每个属性指定给任务的属性。类似于bat文件中的$*变量


如何实现这一点?

这个问题由来已久,但FWIW下面是我如何处理获取MSBuild命令行参数的问题:

备选方案1(不推荐)
$([System.Environment]::CommandLine.Trim())

问题是,在使用
dotnet build
时,这将导致以下错误

MSB4185:类型“System.Environment”上的函数“CommandLine”无效 无法作为MSBuild属性函数执行。'

方案2(FTW) 创建任务 使用该任务为每个参数创建一个项

(可选)将参数重新构造为单个字符串

@(CommandLineArg“”)

您还发现了关于此的其他信息吗?我和你的位置完全一样。。。我需要从目标内部调用nuget.exe,我想传递从外部设置的任何属性。我也是。。我可以在使用TFS build时获取该值,但不能从使用发布配置文件的VS获取该值。。
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>