Condividi tramite


Attività VerifyFileHash

Verifica che un file corrisponda all'hash file previsto. Se l'hash non corrisponde, l'attività ha esito negativo.

Questa attività è stata aggiunta nella versione 15.8. È tuttavia necessaria una soluzione alternativa per poter usare le versioni di MSBuild precedenti alla versione 16.0.

Parametri dell'attività

Nella tabella che segue vengono descritti i parametri dell'attività VerifyFileHash.

Parametro Descrizione
File Parametro String obbligatorio.

File di cui eseguire l'hashing e la convalida.
Hash Parametro String obbligatorio.

Hash file previsto.
Algorithm Parametro String facoltativo.

Algoritmo. Valori consentiti: SHA256, SHA384, SHA512. Valore predefinito = SHA256.
HashEncoding Parametro String facoltativo.

Codifica da usare per gli hash generati. Il valore predefinito è hex. Valori consentiti = hex, base64.

Esempio

Nell'esempio seguente l'attività VerifyFileHash viene usata per verificare il relativo 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>

In MSBuild 16.5 e versioni successive, se non si vuole che la compilazione non riesca quando l'hash non corrisponde, ad esempio se si usa il confronto hash come condizione per il flusso di controllo, è possibile effettuare il downgrade dell'avviso a un messaggio usando il codice seguente:

  <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>

Vedi anche