Задача VerifyFileHash

Проверяет, что файл соответствует ожидаемому хэшу файла. Если хэш не соответствует, задача завершается ошибкой.

Эта задача была добавлена в версии 15.8, но требует обходное решение для версий MSBuild до 16.0.

Параметры задачи

В следующей таблице приводятся параметры задачи 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>

См. также