Msbuild 仅当文件夹存在时,才使用webdeploy在该文件夹上设置ACL

Msbuild 仅当文件夹存在时,才使用webdeploy在该文件夹上设置ACL,msbuild,msdeploy,webdeploy,Msbuild,Msdeploy,Webdeploy,我有一个项目,在服务器上有一个文件夹,其中包含上载的文件。我没有把它包括在web部署中,因为它太大了 因此,我有一个wpp.targets文件,它跳过了删除该文件夹及其内容(一个重要的考虑事项:-) 但是,我想放弃手动服务器配置,因此我希望web部署能够确保IIS_USRS组对UserMedia文件夹具有写入权限(因此我永远不必记得检查) 我找到了一个能让我一路走到那里的方法。但是MSDEPLOY在创建WebDeploy包时抛出一个错误,抱怨该文件夹不存在,无法设置ACL,并且在我的本地计算机上

我有一个项目,在服务器上有一个文件夹,其中包含上载的文件。我没有把它包括在web部署中,因为它太大了

因此,我有一个wpp.targets文件,它跳过了删除该文件夹及其内容(一个重要的考虑事项:-)

但是,我想放弃手动服务器配置,因此我希望web部署能够确保IIS_USRS组对UserMedia文件夹具有写入权限(因此我永远不必记得检查)

我找到了一个能让我一路走到那里的方法。但是MSDEPLOY在创建WebDeploy包时抛出一个错误,抱怨该文件夹不存在,无法设置ACL,并且在我的本地计算机上不存在该文件夹

所以,我的问题是,是否有可能修改的方法,以便仅当文件夹存在时才能设置ACL


我的wpp.targets文件:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="SetupCustomAcls" AfterTargets="AddIisSettingAndFileContentsToSourceManifest">
    <ItemGroup>
      <MsDeploySourceManifest Include="setAcl">
        <Path>$(_MSDeployDirPath_FullPath)\UserMedia</Path>
        <setAclAccess>Read,Write</setAclAccess>
        <setAclResourceType>Directory</setAclResourceType>
        <AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
      </MsDeploySourceManifest>
    </ItemGroup>
  </Target>

  <Target Name="DeclareCustomParameters" AfterTargets="AddIisAndContentDeclareParametersItems">
    <ItemGroup>
      <MsDeployDeclareParameters Include="UserMediaSetAclParam">
        <Kind>ProviderPath</Kind>
        <Scope>setAcl</Scope>
        <Match>^$(_EscapeRegEx_MSDeployDirPath)\\UserMedia</Match>
        <Description>Add write permission to the UserMedia folder.</Description>
        <DefaultValue>{$(_MsDeployParameterNameForContentPath)}/UserMedia</DefaultValue>
        <Value>$(_DestinationContentPath)/UserMedia</Value>
        <Tags>Hidden</Tags>
        <Priority>$(VsSetAclPriority)</Priority>
        <ExcludeFromSetParameter>True</ExcludeFromSetParameter>
      </MsDeployDeclareParameters>
    </ItemGroup>
  </Target>

  <PropertyGroup>
    <OnBeforePackageUsingManifest>AddCustomSkipRules</OnBeforePackageUsingManifest>
  </PropertyGroup>
  <PropertyGroup>
    <UseMsDeployExe>true</UseMsDeployExe>
  </PropertyGroup>

  <Target Name="AddCustomSkipRules">
    <ItemGroup>
      <MsDeploySkipRules Include="SkipUserMediaFiles">
        <SkipAction>Delete</SkipAction>
        <ObjectName>filePath</ObjectName>
        <AbsolutePath>UserMedia$</AbsolutePath>
        <XPath></XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipUserMediaFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>UserMedia$</AbsolutePath>
        <XPath></XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipAppFiles">
        <SkipAction>Delete</SkipAction>
        <ObjectName>filePath</ObjectName>
        <AbsolutePath>apps$</AbsolutePath>
        <XPath></XPath>
      </MsDeploySkipRules>
      <MsDeploySkipRules Include="SkipAppFolder">
        <SkipAction>Delete</SkipAction>
        <ObjectName>dirPath</ObjectName>
        <AbsolutePath>apps$</AbsolutePath>
        <XPath></XPath>
      </MsDeploySkipRules>
    </ItemGroup>
  </Target>
</Project>

$(\u MSDeployDirPath\u FullPath)\UserMedia
读,写
目录
setAclResourceType;setAclAccess
提供者路径
setAcl
^$(\u EscapeRegEx\u MSDeployDirPath)\\UserMedia
向UserMedia文件夹添加写入权限。
{$(\u MsDeployParameterNameForContentPath)}/UserMedia
$(\u DestinationContentPath)/UserMedia
隐藏的
$(VsSetAclPriority)
真的
阿达斯基普鲁士酒店
真的
删除
文件路径
用户媒体$
删除
肮脏的
用户媒体$
删除
文件路径
应用程序$
删除
肮脏的
应用程序$