如何从正在处理的项目文件中访问msbuild命令行参数?
我需要从正在处理的项目文件中访问msbuild命令行参数(特别是指定的目标和属性),以便将它们传递给任务的属性 我的msbuild文件使用了大量属性,而且我事先不知道哪些属性将通过命令行被重写,因此我正在寻找一种方法,将这些属性向下传递,而无需手动将每个属性指定给任务的属性。类似于bat文件中的$*变量如何从正在处理的项目文件中访问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
如何实现这一点?这个问题由来已久,但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>