获取MSBuild脚本中的文件大小
我是否可以在不编写自己的代码的情况下从MSBuild脚本中找出一组文件的大小 MSBuild本身在单个项上生成一些元数据(例如,上次修改时间为%(ModifiedTime) ),但没有尺码。我现在什么也看不见 编辑:根据Seva的回答,下面是一个内联任务,返回项目数组的总大小:获取MSBuild脚本中的文件大小,msbuild,Msbuild,我是否可以在不编写自己的代码的情况下从MSBuild脚本中找出一组文件的大小 MSBuild本身在单个项上生成一些元数据(例如,上次修改时间为%(ModifiedTime) ),但没有尺码。我现在什么也看不见 编辑:根据Seva的回答,下面是一个内联任务,返回项目数组的总大小: <UsingTask TaskName="GetFileSize" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft
<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>
您实际上可以在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>