首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSBuild:如何使用MSBuild计算文件校验和?

MSBuild:如何使用MSBuild计算文件校验和?
EN

Stack Overflow用户
提问于 2019-06-07 04:29:32
回答 1查看 415关注 0票数 0

如何使用MSBuild计算文件校验和?

我不想依赖MSBuild扩展。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-07 04:34:53

一种选择是在项目文件中使用C#代码。该示例说明如何向C#代码传递参数,以及如何从该代码传递参数。

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<Project>
    <UsingTask TaskName="GenerateHash" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
      <InputFile ParameterType="System.String" Required="true" />
      <Checksum ParameterType="System.String" Output="true" />
    </ParameterGroup>
    <Task>
      <Using Namespace="System.IO" />
      <Using Namespace="System.Security.Cryptography" />
      <Code Type="Fragment" Language="cs">
        <![CDATA[
              using (var md5 = MD5.Create())
              {                
                  using (var stream = new FileStream(InputFile, FileMode.Open))
                  {
                      byte[] bytes = md5.ComputeHash(stream);  

                      // Convert byte array to a string   
                      StringBuilder builder = new StringBuilder();  
                      for (int i = 0; i < bytes.Length; i++)  
                      {  
                          builder.Append(bytes[i].ToString("x2"));  
                      }  
                      Checksum = builder.ToString();
                  }
              }
          ]]>
      </Code>
    </Task>
  </UsingTask>

  <Target Name="GenerateManifestJson" AfterTargets="PostBuild" >
    <GenerateHash InputFile="$(FileName)">
      <Output
          TaskParameter="Checksum"
          PropertyName="ArtifactChecksum" />
    </GenerateHash>


    <ItemGroup>
      <ManifestJson Include="{" />
      <ManifestJson Include="%20&quot;checksum&quot;:&quot;$(ArtifactChecksum)&quot;" />
      <ManifestJson Include="}" />
    </ItemGroup>

    <WriteLinesToFile File="c:\temp\hello.manifest.json" Lines="@(ManifestJson)" Overwrite="true" Encoding="utf-8" />
  </Target>
</Project>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56484700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档