我正在使用包目标从msbuild创建一个zip文件。它创建它很好,我放入它的文件夹具有允许该用户完全控制该文件夹的用户的权限。但是,当我删除zip文件,然后运行msbuild再次创建zip文件时,zip文件已失去该用户的权限。
然后我使用某个用户以编程方式部署包文件,该用户不再拥有权限。
如何强制该zip文件继承父文件夹的权限,以便每次msbuild创建时都不必手动将权限添加回zip文件?
答案 0 :(得分:2)
恢复zip文件的权限继承会更好,比如
icacls {packageFileName.zip} /reset
答案 1 :(得分: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>