MSBuild社区任务的Zip任务更改文件属性

MSBuild社区任务的Zip任务更改文件属性,msbuild,attributes,zip,tfsbuild,msbuildcommunitytasks,Msbuild,Attributes,Zip,Tfsbuild,Msbuildcommunitytasks,我发现,使用MSBuild Community Tasks提供的zip任务创建zip文件会更改(或者更确切地说,删除)正在压缩的文件的任何文件属性。下面是我对Attrib任务的一个调用,以使文件夹中的DLL具有只读属性: <Attrib ReadOnly="true" Normal="true" Files="@(DLLsToReadOnly)" /> 接下来,我将这些DLL包含在一个FilesToZip项目中,并调用了以下代码: <Zip Files="@(FilesT

我发现,使用MSBuild Community Tasks提供的zip任务创建zip文件会更改(或者更确切地说,删除)正在压缩的文件的任何文件属性。下面是我对Attrib任务的一个调用,以使文件夹中的DLL具有只读属性:

<Attrib ReadOnly="true" Normal="true" Files="@(DLLsToReadOnly)" />

接下来,我将这些DLL包含在一个FilesToZip项目中,并调用了以下代码:

<Zip Files="@(FilesToZip)" WorkingDirectory="$(Directory with files)" ZipFileName="$(DropLocation)\$(Zip file name).zip" />

在检查提取的文件时,我发现没有一个DLL具有只读属性(更不用说任何)。查看Zip任务从中获取文件的DLL所在的文件夹,发现DLL具有属性R(只读)

在阅读了文档和源代码之后,我找不到任何可以设置为告诉任务保留文件属性的属性。是否有一个替代品,我可以使用它来保持文件属性不变?我曾经尝试过在社区任务源代码引用它的Zip类中查看ICSharpCode.SharpZipLib,但到目前为止,我还不能从中获得很多信息


(我正在使用社区任务1.2.0.306版)

好的,现在我将在这里回答我自己的问题,希望它对某人有用:

在Zip任务的源代码(MSBuild.Community.Tasks.Zip)中,私有方法ZipFiles()不设置或查看任何外部属性(任务压缩的每个文件的文件属性)。由于我只需要对具有只读属性的文件保持属性完整,因此我编写了以下代码来满足我的简单目的:

if ((file.Attributes & FileAttributes.ReadOnly)
{
     entry.ExternalFileAttributes = (int)FileAttributes.ReadOnly;
}
这与我应该使用的通用且健壮的代码没有什么相似之处,但我写这篇文章是为了看看这是否是保存文件属性的正确方法,事实似乎确实如此

另外,如果有人对这里可以改进的地方有什么建议,请分享你的想法!作为一名初出茅庐的开发人员,我始终乐于接受教育:)