发布时没有执行wpp.targets中的setAcl - Web部署(但是说它是)

kma*_*man 4 msbuild visual-studio-2010 msdeploy

我有一个Web表单应用程序(Visual Studio 2010),现有的wpp.targets文件可以成功地执行LESS预处理,资源缩小/捆绑,web.config加密等操作.

通过简单地右键单击Web应用程序,然后选择"发布 - 文件系统"选项,我一直能够部署得很好.

我最近决定尝试在应用程序中的特定文件夹上自动设置ACL权限.这导致我从文件系统发布选项更改为Web部署选项(在服务器上安装和配置Web部署3后也可以正常工作).

我切换到Web Deploy的原因是因为我的理解是通过使用Web Deploy选项,我应该能够在我的wpp.targets文件中添加其他步骤来设置必要的文件夹权限.

我已经看过很多关于这个主题的文章,博客,论坛帖子等,看起来相当简单.

我正在尝试为域用户提供名为"IDAutomation"的文件夹的读/写/修改权限 - 所以我基本上只是在现有的wpp.targets文件末尾添加了以下内容:

<Target Name="SetupCustomAcls" AfterTargets="AddIisSettingAndFileContentsToSourceManifest">
    <ItemGroup>
        <MsDeploySourceManifest Include="setAcl">
            <Path>$(_MSDeployDirPath_FullPath)\IDAutomation</Path>
            <setAclAccess>Read,Write,Modify</setAclAccess>
            <setAclUser>Domain Users</setAclUser>
            <setAclResourceType>Directory</setAclResourceType>
            <AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
        </MsDeploySourceManifest>
    </ItemGroup>
</Target>

<Target Name="DeclareCustomParameters" AfterTargets="AddIisAndContentDeclareParametersItems">
    <ItemGroup>
        <MsDeployDeclareParameters Include="IDAutomationSetAclParam">
            <Kind>ProviderPath</Kind>
            <Scope>setAcl</Scope>
            <Match>^$(_EscapeRegEx_MSDeployDirPath)\\IDAutomation$</Match>
            <Value>$(_DestinationContentPath)/IDAutomation</Value>
            <ExcludeFromSetParameter>True</ExcludeFromSetParameter>
        </MsDeployDeclareParameters>
    </ItemGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)

但我显然遗漏了一些东西,因为我点击了Publish - > Web Deploy - 让它做了它的事情,权限不会应用到文件夹.该应用程序已成功部署,一切看起来都很好 - 它只是没有为我设置该文件夹的权限.

以下是部署输出结束时的一些摘录:

Target "Package" skipped, due to false condition; ($(_CreatePackage)) was evaluated as (false).
Target "MSDeployPublish" in file ..... from project .....
Start Web Deploy Publish the Application/package to....
...
Starting Web deployment task from source:manifest(.....) to Destination:auto().
Updating setAcl (Site/app).
Updating setAcl (Site/app).
Updating setAcl (Site/app/IDAutomation).     <--  Appears to be doing something??
Updating filePath......
....
Updating setAcl (Site/app).
Updating setAcl (Site/app).
Updating setAcl (Site/app/IDAutomation).     <--  Appears to be doing something??
Successfully executed Web deployment task.
Publish is successfully deployed.
Task "MSdeploy" skipped, due to false condition; ($(UseMsdeployExe)) was evaluated as (False).
Done building target "MSDeployPublish" in project ...
Done building project ...
Run Code Online (Sandbox Code Playgroud)

所以才出现(两次出于某种原因)你可以看到被设置文件夹的访问控制列表,但是当我在远程服务器上的文件夹去看看,权限都没有得到应用.

我在这里错过了什么?

我不是要为以后/手动部署或任何涉及构建服务器的东西构建一个包.我只是手动尝试发布 - > Web Deploy.

Web Deploy 3.0也安装在我的机器(win7)和Web服务器(Win2008R2/IIS7.5)上.

- 更新 -

我发现无论我在setAclUser元素中设置什么,sitemanifest.xml文件总是缺少文件夹的setAclUser属性(缩写路径):

<sitemanifest>
    <IisApp path="C:\...\obj\...\Package\PackageTmp" managedRuntimeVersion="v4.0" />
    <setAcl path="C:\...\obj\...\Package\PackageTmp" setAclResourceType="Directory" />
    <setAcl path="C:\...\obj\...\Package\PackageTmp" setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" />
    <setAcl path="C:\...\obj\...\Package\PackageTmp\IDAutomation" setAclResourceType="Directory" setAclAccess="Read,Write" />
</sitemanifest>
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到IDAutomation文件夹的setAcl元素上没有setAclUser.希望这将成为某人的线索?

再次感谢-

kma*_*man 6

叹了口气 - 终于意识到我错过了AdditionalProviderSettings中的setAclUser属性:

<AdditionalProviderSettings>setAclUser;setAclResourceType;setAclAccess</AdditionalProviderSettings>
Run Code Online (Sandbox Code Playgroud)