Задача GetFileHash

Вычисляет контрольные суммы содержимого файла или набора файлов.

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

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

В следующей таблице приводятся параметры задачи GetFileHash.

Параметр Описание
Files Обязательный параметр ITaskItem[] .

Файлы, которые нужно хэшировать.
Items Выходной параметр ITaskItem[].

Входные данные Files с дополнительными метаданными, заданные для хэша файла.
Hash Выходной параметр String.

Хэш файла. Эти выходные данные задаются только в том случае, если передан только один элемент.
Algorithm Необязательный параметр String.

Алгоритм. Допустимые значения: SHA256, SHA384, SHA512. По умолчанию = SHA256.
MetadataName Необязательный параметр String.

Имя метаданных, где хранится хэш в каждом элементе. По умолчанию — FileHash.
HashEncoding Необязательный параметр String.

Кодировка, используемая для созданных хэшей. По умолчанию — hex. Допустимые значения = hex, base64.

Пример

В следующем примере используется задача GetFileHash для определения и вывода контрольной суммы элементов FilesToHash.

<Project>
  <ItemGroup>
    <FilesToHash Include="$(MSBuildThisFileDirectory)\*" />
  </ItemGroup>
  <Target Name="GetHash">
    <GetFileHash Files="@(FilesToHash)">
      <Output
          TaskParameter="Items"
          ItemName="FilesWithHashes" />
    </GetFileHash>

    <Message Importance="High"
             Text="@(FilesWithHashes->'%(Identity): %(FileHash)')" />
  </Target>
</Project>

С одним файлом можно использовать выходной Hash параметр. Следующий пример проекта называется hash-example.proj и вычисляет хэш для себя:

<Project>
    <ItemGroup>
      <FileToHash Include="$(MSBuildThisFileDirectory)hash-example.proj" />
    </ItemGroup>
    <Target Name="GetHash">
      <GetFileHash Files="@(FileToHash)">
        <Output
            TaskParameter="Hash"
            ItemName="FileHash" />
      </GetFileHash>
  
      <Message Importance="High"
               Text="File: @(FileToHash) Hash: @(FileHash)" />
    </Target>
  </Project>

См. также