【问题标题】:How to access the msbuild command line parameters from within the project file being processed?如何从正在处理的项目文件中访问 msbuild 命令行参数?
【发布时间】:2011-03-16 17:04:24
【问题描述】:

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

我的 msbuild 文件使用了大量属性,我不知道哪些属性会被命令行覆盖,所以我正在寻找一种方法来传递这些属性,而无需手动指定每个属性 任务的属性。类似于 bat 文件中的 $* 变量。

我怎样才能做到这一点?

【问题讨论】:

  • 您还发现了关于此的其他信息吗?我在你完全相同的位置......我需要从目标内部调用 nuget.exe,并且我想传递从外部设置的任何属性。
  • 我也是。。我可以在使用 TFS 构建时获得价值,但不能从 VS 使用发布配置文件获得价值。。

标签: msbuild project command-line-arguments msbuild-4.0


【解决方案1】:

这个问题很古老,但这里的 FWIW 是我处理获取 MSBuild 命令行参数的方式:

选项 1(不推荐)

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

问题是这样在使用dotnet build时会出现如下错误。

'MSB4185:“System.Environment”类型上的函数“CommandLine”是 不可作为 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>

【讨论】:

    猜你喜欢
    • 2013-07-23
    • 2013-11-27
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-11-25
    • 2010-10-08
    • 2011-01-10
    • 1970-01-01
    相关资源
    最近更新 更多