3

パッケージ ターゲットを使用して msbuild から zip ファイルを作成しています。それはうまく作成され、私が入れているフォルダーには、そのユーザーがフォルダーを完全に制御できるようにするユーザーのアクセス許可があります。ただし、zip ファイルを削除してから msbuild を実行して zip ファイルを再度作成すると、zip ファイルはそのユーザーのアクセス許可を失いました。

そのため、特定のユーザーを使用してプログラムでパッケージ ファイルを展開していますが、そのユーザーにはアクセス許可がありません。

そのzipファイルに親フォルダーからアクセス許可を強制的に継承させて、msbuildが作成するたびにアクセス許可をzipファイルに手動で追加する必要がないようにするにはどうすればよいですか?

4

2 に答える 2

2

このように、zip ファイルのアクセス許可の継承を復元することをお勧めします。

icacls {packageFileName.zip} /reset
于 2011-12-23T08:02:29.567 に答える
1

Package ターゲットにアクセス許可を設定するように指示する特定の方法がないことが判明しました。したがって、回避策は、Package ターゲットの後にパーミッションを自分で設定することです。

これが私がやった方法です。正規表現部分は、ビルド スクリプトにあるプロジェクト ファイル パスからプロジェクト ファイルの名前を取得することです。その名前は、作成される .\Output\Packages\ フォルダーまで一致します。次に、exec コマンド内で cacls を呼び出して、そのディレクトリ内のすべてのファイルに、指定したユーザーのアクセス許可を設定します。

  <Target Name="Package">
    <MSBuild Projects="@(PackageProject)" Targets="Package" Properties="Platform=$(Platform);
                                                                           Configuration=$(Configuration);
                                                                           DeployOnBuild=true;
                                                                           DeployTarget=Package;
                                       PackageLocation=$(PackageOutputDir)\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2])\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2]).zip;
                                       PackageAsSingleFile=true;
                                       ExcludeFilesFromDeployment=Web.config;
                                       _PackageTempDir=$(PackageOutputDir)\temp;">
    </MSBuild>
    <Exec Command="echo y| cacls $(PackageOutputDir)\$([System.Text.RegularExpressions.Regex]::Split($(ProjectName), '(.*\\)([a-z,A-Z,0-9,_,-]+)(\.\*proj;)')[2])\* /G NetworkService:F"/>
  </Target>
于 2011-08-18T13:08:04.100 に答える