2

MSBuild Community Tasksによって提供されるZipタスクを使用してzipファイルを作成すると、zipされているファイルのファイル属性が変更(または削除)されることがわかりました。これは、フォルダー内のDLLに読み取り専用属性を持たせるためのAttribタスクの呼び出しの1つです。

<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(読み取り専用)があることがわかりました。

ドキュメントとソースコードの両方を読んだ後、ファイル属性を保持するようにタスクに指示するために設定できるプロパティが見つかりませんでした。ファイル属性をそのまま維持するために使用できる代替手段はありますか?Community TasksソースのZipクラスがICSharpCode.SharpZipLibを参照しているので、ICSharpCode.SharpZipLibを調べてみましたが、これまでのところ、それを十分に活用することはできませんでした。

(私はコミュニティタスクバージョン1.2.0.306を使用しています)

4

1 に答える 1

1

さて、ここで私自身の質問に答えて、誰かに役立つことを願っています。

Zipタスクのソースコード(MSBuild.Community.Tasks.Zip)では、プライベートメソッドZipFiles()は、外部属性(タスクによって圧縮されている各ファイルのファイル属性)を設定または確認することはありません。読み取り専用属性を持つファイルの属性をそのまま保持する必要があるだけなので、単純な目的を果たすために次のコードを記述しました。

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

これは、私が使用すべき一般的で堅牢なコードに近いものではありませんが、これがファイル属性を保持する正しい方法であるかどうかを確認するためにこれを作成しました。

PSここで何を改善できるかについて誰かが提案を持っているなら、あなたの考えを共有してください!駆け出しの開発者として、私は常に教育を受けています:)

于 2009-09-03T22:51:27.857 に答える