Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Verifies that a file matches the expected file hash. If the hash doesn't match, the task fails.
This task was added in 15.8, but requires a workaround to use for MSBuild versions below 16.0.
Task parameters
The following table describes the parameters of the VerifyFileHash task.
| Parameter | Description | 
|---|---|
| File | Required Stringparameter.The file to be hashed and validated. | 
| Hash | Required Stringparameter.The expected hash of the file. | 
| Algorithm | Optional Stringparameter.The algorithm. Allowed values: SHA256,SHA384,SHA512. Default =SHA256. | 
| HashEncoding | Optional Stringparameter.The encoding to use for generated hashes. Defaults to hex. Allowed values =hex,base64. | 
Example
The following example uses the VerifyFileHash task to verify its own checksum.
<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>
On MSBuild 16.5 and later, if you don't want the build to fail when the hash doesn't match, such as if you are using the hash comparison as a condition for control flow, you can downgrade the warning to a message using the following code:
  <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>