如何从正在处理的项目文件中访问 msbuild 命令行参数?
Posted
技术标签:
【中文标题】如何从正在处理的项目文件中访问 msbuild 命令行参数?【英文标题】:How to access the msbuild command line parameters from within the project file being processed? 【发布时间】:2011-03-16 17:04:24 【问题描述】:我需要从正在处理的项目文件中访问 msbuild 命令行参数(特别是指定的目标和属性),以便将它们传递给
我的 msbuild 文件使用了大量属性,我不知道哪些属性会被命令行覆盖,所以我正在寻找一种方法来传递这些属性,而无需手动指定每个属性
我怎样才能做到这一点?
【问题讨论】:
您还发现了关于此的其他信息吗?我在你完全相同的位置......我需要从目标内部调用 nuget.exe,并且我想传递从外部设置的任何属性。 我也是。。我可以在使用 TFS 构建时获得价值,但不能从 VS 使用发布配置文件获得价值。。 【参考方案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>
【讨论】:
以上是关于如何从正在处理的项目文件中访问 msbuild 命令行参数?的主要内容,如果未能解决你的问题,请参考以下文章
MSBuild:是不是可以在实际项目文件中指定项目构建依赖项?
SonarQube MSBuild Scanner 不会从分析中排除文件
MSBUILD : 错误 MSB1008: teamcity 中只能指定一个项目
如何在批处理文件中调用设置为“C:\Program Files (x86)\MSBuild\14.0\Bin\MSBuild.exe”的变量?