VerifyFileHash 任务
验证文件是否与预期的文件哈希匹配。 如果哈希不匹配,则该任务失败。
此任务已添加到版本 15.8 中,但需要一种用于 16.0 以下 MSBuild 版本的变通方法。
任务参数
下表描述了 VerifyFileHash
任务的参数。
参数 | 说明 |
---|---|
File |
必选 String 参数。要进行哈希处理和验证的文件。 |
Hash |
必选 String 参数。预期的文件哈希。 |
Algorithm |
可选 String 参数。算法。 允许的值: SHA256 、SHA384 、SHA512 。 默认值 = SHA256 。 |
HashEncoding |
可选 String 参数。用于生成哈希的编码。 默认为 hex 。 允许的值 = hex 、base64 。 |
示例
下例使用 VerifyFileHash
任务来验证其自己的校验和。
<Project>
<Target Name="VerifyHash">
<GetFileHash Files="$(MSBuildProjectFullPath)">
<Output
TaskParameter="Items"
ItemName="FilesWithHashes" />
</GetFileHash>
<Message Importance="High"
Text="@(FilesWithHashes->'%(Identity): %(FileHash)')" />
<VerifyFileHash File="$(MSBuildThisFileFullPath)"
Hash="$(ExpectedHash)" />
</Target>
</Project>
在 MSBuild 16.5 和更高版本中,如果不希望在哈希不匹配时生成失败(例如在使用哈希比较作为控制流的条件时),可以使用以下代码将警告降级为消息:
<PropertyGroup>
<MSBuildWarningsAsMessages>$(MSBuildWarningsAsMessages);MSB3952</MSBuildWarningsAsMessages>
</PropertyGroup>
<Target Name="DemoVerifyCheck">
<VerifyFileHash File="$(MSBuildThisFileFullPath)"
Hash="1"
ContinueOnError="WarnAndContinue" />
<PropertyGroup>
<HashMatched>$(MSBuildLastTaskResult)</HashMatched>
</PropertyGroup>
<Message Condition=" '$(HashMatched)' != 'true'"
Text="The hash didn't match" />
<Message Condition=" '$(HashMatched)' == 'true'"
Text="The hash did match" />
</Target>