在MSBuild脚本中获取文件大小

3

在不编写自己的代码的情况下,我可以从MSBuild脚本中查找一组文件的大小吗?

MSBuild本身对单个项目具有一些元数据(例如,在%(ModifiedTime)处的最后修改时间),但没有大小信息。我在http://msbuildextensionpack.com/上找不到任何信息。

编辑:根据Seva的答案,以下是一个内联任务,返回一组项目的总大小:

<UsingTask TaskName="GetFileSize" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
  <ParameterGroup>
    <Files ParameterType="Microsoft.Build.Framework.ITaskItem[]" Required="true" />
    <TotalSize ParameterType="System.Int64" Output="true"/>
  </ParameterGroup>
  <Task>
    <Using Namespace="System.IO"/>
    <Code Type="Fragment" Language="cs"><![CDATA[
        long l = 0;
        foreach (var item in Files) {
            var fi = new FileInfo(item.ItemSpec);
            l += fi.Length;
        }
        TotalSize = l;
]]></Code>
  </Task>
</UsingTask>
1个回答

5

您可以在msbuild项目中使用.Net API的子集来使用内联任务

例如,以下内容可打印单个文件的文件大小:

<UsingTask TaskName="GetFileSize" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
  <ParameterGroup>
    <FileName Required="true" />
    <FileSize ParameterType="System.Int64" Output="true"/>
  </ParameterGroup>
  <Task>
    <Using Namespace="System.IO"/>
    <Code Type="Fragment" Language="cs"><![CDATA[
FileInfo fi = new FileInfo(FileName);
FileSize = fi.Length;
]]></Code>
  </Task>
</UsingTask>

<Target Name="PrintFileSize" >
  <GetFileSize FileName="$(MyFileName)">
    <Output TaskParameter="FileSize" PropertyName="MyFileSize" />
  </GetFileSize>
  <Message Text="file size of $(MyFileName) is $(MyFileSize)" />
</Target>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接