Compartir vía


Tarea VerifyFileHash

Comprueba que un archivo coincide con el hash de archivo esperado. Si el hash no coincide, se producirá un error en la tarea.

Esta tarea se agregó en la versión 15.8, pero requiere una solución alternativa para usarla en versiones de MSBuild anteriores a la 16.0.

Parámetros de tareas

En la siguiente tabla se describen los parámetros de la tarea VerifyFileHash .

Parámetro Descripción
File Parámetro String requerido.

Archivo al que se va a aplicar el algoritmo hash y se va a validar.
Hash Parámetro String requerido.

Hash esperado del archivo.
Algorithm Parámetro String opcional.

Algoritmo. Valores permitidos: SHA256, SHA384 y SHA512. Valor predeterminado: SHA256.
HashEncoding Parámetro String opcional.

Codificación que se va a usar para generar los códigos hash. Tiene como valor predeterminado hex. Valores permitidos: hex y base64.

Ejemplo

En el ejemplo siguiente se usa la tarea VerifyFileHash para comprobar su propia suma de comprobación.

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

En MSBuild 16.5 y versiones posteriores, si no quiere que la compilación genere errores cuando no coincida el hash (por ejemplo, al utilizar la comparación de hash como condición para el flujo de control), puede reducir la importancia del mensaje para que deje de mostrarse como advertencia con el código siguiente:

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

Vea también