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

时间:2009-09-03 21:35:17

标签: msbuild attributes zip tfsbuild msbuildcommunitytasks

我发现使用MSBuild社区任务提供的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(对于只读)。

在阅读了文档和源代码后,我找不到任何可以设置的属性来告诉任务保留文件属性。我可以使用哪种替代品来保持文件属性的完整性?我已经尝试过查看ICSharpCode.SharpZipLib,因为社区任务源中的Zip类引用了它,但到目前为止,我还没有从中做出太多贡献。

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

1 个答案:

答案 0 :(得分:1)

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

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

if ((file.Attributes & FileAttributes.ReadOnly)
{
     entry.ExternalFileAttributes = (int)FileAttributes.ReadOnly;
}

这不是我应该使用的通用和健壮的代码附近,但是我写了这个,看看这是否是保存文件属性的正确方法,而且确实似乎是这种情况。

P.S。如果有人对这里可以改进的地方有任何建议,请分享您的想法!作为一个初出茅庐的开发者,我总是愿意接受教育:)