ZIP-файл пакета веб-развертывания MSBUILD не наследует разрешения от родительской папки

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

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

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


person Ben Anderson    schedule 11.08.2011    source источник


Ответы (2)


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

icacls {packageFileName.zip} /reset
person Rail    schedule 23.12.2011
comment
Не в этом дело. В этой папке есть файлы, отличные от zip-файла. Им также нужны разрешения, чтобы оставаться прежними. Мне нужно снова добавить разрешения в папку, чтобы они унаследовали их соответствующим образом. - person Ben Anderson; 23.12.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>
person Ben Anderson    schedule 18.08.2011