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 回答