Zip-файл пакета MSBUILD для веб-развертывания не наследует разрешения от родительской папки - PullRequest
3 голосов
/ 11 августа 2011

Я создаю zip-файл из msbuild, используя целевой пакет. Это создает его нормально, и папка, в которую я помещаю его, имеет разрешения для пользователя, который позволяет этому пользователю иметь полный контроль над папкой. Однако когда я удаляю zip-файл, затем запускаю msbuild, чтобы снова создать zip-файл, zip-файл утратил разрешения для этого пользователя.

Итак, я использую определенного пользователя для программного развертывания файла пакета, и у этого пользователя больше нет разрешений.

Как заставить этот zip-файл наследовать разрешения от родительской папки, чтобы мне не приходилось вручную добавлять разрешения обратно в zip-файл каждый раз, когда msbuild создает его?

Ответы [ 2 ]

2 голосов
/ 23 декабря 2011

Было бы лучше восстановить наследование прав для zip-файла, как это

icacls {packageFileName.zip} /reset
1 голос
/ 18 августа 2011

Оказывается, что нет конкретного способа сообщить цели пакета для установки разрешений.Поэтому обходной путь - установить разрешения самостоятельно после цели Package.

Вот как я это сделал.Часть с регулярным выражением - извлечь имя файла проекта из пути к файлу проекта, который есть в нашем скрипте сборки.Это имя совпадает с созданной папкой. \ Output \ Packages \.Затем я вызываю cacls внутри команды exec, чтобы установить разрешения для каждого файла в этом каталоге для указанного пользователем пользователя.

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