2011-08-11 3 views
3

パッケージターゲットを使用してmsbuildからzipファイルを作成しています。それはうまく作成され、私はそれを入れているフォルダは、そのユーザーがフォルダの完全なコントロールを持つことができるユーザーのためのアクセス許可を持っています。ただし、zipファイルを削除すると、msbuildを実行してzipファイルを作成し、zipファイルがそのユーザーのアクセス許可を失ってしまいます。MSBUILD Web展開パッケージzipファイルが親フォルダからのアクセス許可を継承しません。

したがって、特定のユーザーを使用してプログラムでパッケージファイルを展開しており、そのユーザーにはアクセス権がなくなりました。

zipファイルに親フォルダの権限を継承させて、msbuildが作成するたびにzipファイルにアクセス許可を手動で追加する必要はありません。

答えて

1

パッケージのターゲットにアクセス許可を設定するように指示する具体的な方法はありません。そのため、回避策は、パッケージターゲットの後にアクセス権を自分で設定することです。

ここで私はどのようにしたのですか?正規表現の部分は、ビルドスクリプトにあるプロジェクトファイルパスからプロジェクトファイルの名前を引き出すことです。その名前は、作成された\ 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> 
2

そうではない。この場合、この

icacls {packageFileName.zip} /reset 
+0

のように、ZIPファイルのアクセス許可の継承を復元する方が良いだろう。プロセスがそのフォルダに配置するzipファイル以外のファイルがあります。彼らはまた、同じままにする権限が必要です。彼らは適切に継承するように、フォルダに再度アクセス許可を追加する必要があります。 –

+0

icacls * /リセット – Vertigo

関連する問題