Exec 任务
通过使用指定的参数来运行指定程序或命令。
参数
下表描述了 Exec
任务的参数。
参数 | 说明 |
---|---|
Command |
必选 String 参数。要运行的命令。 可以是系统命令(例如 attrib),也可以是可执行文件(例如 program.exe、runprogram.bat 或 setup.msi) 。 此参数可包含多行命令。 或者,可将多个命令放在批文件中,然后使用此参数运行文件。 |
ConsoleOutput |
可选的 ITaskItem[] 输出参数。每个项输出都是工具发出的标准输出或标准错误流的一行。 仅当 ConsoleToMsBuild 设置为 true ,才会捕获此信息。 |
ConsoleToMsBuild |
可选 Boolean 参数。如果为 true ,任务将捕获该工具的标准错误和标准输出,并使其在 ConsoleOutput 输出参数中可用。默认值: false 。 |
CustomErrorRegularExpression |
可选 String 参数。指定用于查找工具输入中错误行的正则表达式。 这对会生成不常见格式的输出的工具非常有用。 除非 IgnoreStandardErrorWarningFormat 指定,否则此正则表达式除了标准表达式之外。默认值: null (无自定义处理)。 |
CustomWarningRegularExpression |
可选 String 参数。指定用于查找工具输入中警告行的正则表达式。 这对会生成不常见格式的输出的工具非常有用。 除非 IgnoreStandardErrorWarningFormat 指定,否则此正则表达式除了标准表达式之外。默认值: 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 代码页。 有效值为 Always 、Never 或 Detect 。 默认值为 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,而不是直接调用进程。
IgnoreExitCode
和 IgnoreStandardErrorWarningFormat
参数影响任务返回 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>