2011-08-11 34 views
3

我使用包目標從msbuild創建zip文件。它創建它並且我將它放入的文件夾具有允許該用戶完全控制該文件夾的用戶的權限。但是,當我刪除zip文件時,則運行msbuild再次創建zip文件,該zip文件已失去該用戶的權限。MSBUILD web部署包壓縮文件不繼承父文件夾的權限

因此,然後我使用某個用戶以編程方式部署軟件包文件,並且該用戶不再具有權限。

如何強制該zip文件繼承父文件夾的權限,以便每次msbuild創建時都不必手動將權限添加回zip文件?

回答

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> 
2

這將是較好的還原權限繼承的zip文件,這樣

icacls {packageFileName.zip} /reset 
+0

不在此例。除了進程放置在該文件夾中的zip文件之外,還有其他文件。他們還需要保持相同的權限。我需要再次將權限添加到文件夾,以便它們適當地繼承它們。 –

+0

icacls * /重置 – Vertigo