Exec 任务

通过使用指定的参数来运行指定程序或命令。

参数

下表描述了 Exec 任务的参数。

参数 说明
Command 必选 String 参数。

要运行的命令。 可以是系统命令(例如 attrib),也可以是可执行文件(例如 program.exe、runprogram.bat 或 setup.msi) 。

此参数可包含多行命令。 或者,可将多个命令放在批文件中,然后使用此参数运行文件。
ConsoleOutput 可选的 ITaskItem[] 输出参数。

每个项输出都是工具发出的标准输出或标准错误流的一行。 仅当 ConsoleToMsBuild 设置为 true,才会捕获此信息。
ConsoleToMsBuild 可选 Boolean 参数。

如果为 true,任务将捕获该工具的标准错误和标准输出,并使其在 ConsoleOutput 输出参数中可用。

默认值:false
CustomErrorRegularExpression 可选 String 参数。

指定用于查找工具输入中错误行的正则表达式。 这对会生成不常见格式的输出的工具非常有用。

默认值:null(无自定义处理)。
CustomWarningRegularExpression 可选 String 参数。

指定用于查找工具输入中警告行的正则表达式。 这对会生成不常见格式的输出的工具非常有用。

默认值:null(无自定义处理)。
EchoOff 可选 Boolean 参数。

如果为 true,任务不会将 Command 的展开形式发送到 MSBuild 日志。

默认值:false
ExitCode 可选 Int32 输出只读参数。

指定由已执行命令提供的退出代码,除非如果任务记录了任何错误,而进程的退出代码为 0(成功),则将 ExitCode 设置为 -1。
IgnoreExitCode 可选 Boolean 参数。

如果为 true,则任务会忽略执行的命令所提供的退出代码。 否则,如果执行的命令返回一个非零退出代码,那么该任务将返回 false

默认值:false
IgnoreStandardErrorWarningFormat 可选 Boolean 参数。

如果为 false,则会选择输出中与标准错误/警告格式相匹配的行,并将其记录为错误/警告。 如果为 true,则会禁用此行为。

默认值:false
Outputs 可选的 ITaskItem[] 输出参数。

包含任务的输出项。 Exec 任务自身不会设置这些项。 相反,你可以提供这些项,使得任务看似已对其进行了设置,以便于稍后在项目中使用。
StdErrEncoding 可选 String 输出参数。

指定捕获的任务标准错误流的编码。 默认值为当前控制台输出编码。
StdOutEncoding 可选 String 输出参数。

指定捕获的任务标准输出流的编码。 默认值为当前控制台输出编码。
UseUtf8Encoding 可选 String 参数。

指定在处理已执行的命令的命令行时是否使用 UTF8 代码页。 有效值为 AlwaysNeverDetect。 默认值为 Detect,这意味着仅当存在非 ANSI 字符时才使用 UTF8 代码页。
WorkingDirectory 可选 String 参数。

指定要在其中运行命令的目录。

默认:项目当前的工作目录。

ToolTaskExtension 参数

此任务继承自 ToolTaskExtension 类,该类继承自 ToolTask 类,后者本身继承自 Task 类。 此继承链向从它们派生的任务添加了几个参数。

下表介绍基类的参数:

参数 说明
EchoOff 可选 bool 参数。

设置为 true 时,此任务会将 /Q 传递到 cmd.exe 命令行,以便命令行不会复制到 stdout。
EnvironmentVariables 可选的 String 数组参数。

环境变量定义的数组,用分号分隔。 每个定义都应指定用等号分隔的环境变量名称和值。 这些变量会传递到生成的可执行文件以及(有选择地重写)常规环境块。 例如,Variable1=Value1;Variable2=Value2
ExitCode 可选 Int32 输出只读参数。

指定执行的命令提供的退出代码。 如果任务记录了任何错误,但进程的退出代码为 0(成功),则这设置为 -1。
LogStandardErrorAsError 可选 bool 参数。

如果是 true,则在标准错误流上收到的所有消息都记录为错误。
StandardErrorImportance 可选 String 参数。

用于从标准错误流记录文本的重要性。
StandardOutputImportance 可选 String 参数。

用于从标准输出流记录文本的重要性。
Timeout 可选 Int32 参数。

指定终止任务可执行文件之前的时间量(以毫秒为单位)。 默认值是 Int.MaxValue,指示没有超时期限。 超时以毫秒为单位。
ToolExe 可选 string 参数。

项目可能会实现此参数以重写 ToolName。 任务可能会重写此参数以保留 ToolName。
ToolPath 可选 string 参数。

指定任务从中加载基础可执行文件的位置。 如果未指定此参数,则任务会使用与运行 MSBuild 的框架版本对应的 SDK 安装路径。
UseCommandProcessor 可选 bool 参数。

设置为 true 时,此任务会为命令行创建一个批处理文件,并使用命令处理器执行它(而不是直接执行命令)。
YieldDuringToolExecution 可选 bool 参数。

设置为 true 时,此任务会在其任务执行时生成节点。

备注

在要执行的作业的特定 MSBuild 任务不可用时,此任务会非常有用。 但是,与更加具体的任务不同,Exec 任务不能根据运行的工具或命令的结果执行其他处理或条件操作。

Exec 任务在 Windows 上调用 cmd.exe,在其他操作系统上调用 sh,而不是直接调用进程

IgnoreExitCodeIgnoreStandardErrorWarningFormat 参数影响任务返回 false(指示错误)的条件。 使用默认设置(两者均为 false)时,如果可执行文件具有非零退出代码,或者在可执行文件的标准错误流中找到诊断消息,则任务 Exec 指示失败(返回 false)。 如果只希望 Exec 在可执行文件返回非零退出代码时指示失败,则将 IgnoreStandardErrorWarningFormat 设置为 true

示例

以下示例使用 Exec 任务来运行命令。

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <ItemGroup>
        <Binaries Include="*.dll;*.exe"/>
    </ItemGroup>

    <Target Name="SetACL">
        <!-- set security on binaries-->
        <Exec Command="echo y| cacls %(Binaries.Identity) /G everyone:R"/>
    </Target>
</Project>

请参阅