visual-studio-2010 - 发布时未执行 wpp.targets 中的 setAcl - Web 部署(但说是)

标签 visual-studio-2010 msbuild msdeploy

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

我一直能够通过简单地右键单击 Web 应用程序并选择“发布 - 文件系统”选项来进行部署。

我最近决定尝试自动设置应用程序中特定文件夹的 ACL 权限。这使我走上了从 File System 发布选项更改为 Web Deploy 选项(在服务器上安装和配置 Web Deploy 3 后也能正常工作)的道路。

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

看了很多文章,blogs , 论坛 posts等关于这个主题,它似乎相当简单。

我正在尝试为名为“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>

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

以下是部署输出结尾的一些摘录:
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 ...

因此,正如您所看到的,它似乎是在文件夹上设置 acl(出于某种原因两次),但是当我查看远程服务器上的文件夹时,尚未应用权限。

我在这里缺少什么?

我不是要为以后/手动部署或任何涉及构建服务器的内容构建包。我只是手动尝试发布 -> Web 部署。

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

-- 更新 --

我发现无论我在 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>

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

再次感谢-

最佳答案

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

<AdditionalProviderSettings>setAclUser;setAclResourceType;setAclAccess</AdditionalProviderSettings>

关于visual-studio-2010 - 发布时未执行 wpp.targets 中的 setAcl - Web 部署(但说是),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13424523/

相关文章:

asp.net - Web 部署和文件夹权限

visual-studio - F# 和 Visual Studio 2010 Express 版?

visual-studio - "BuildPackage"属性记录在哪里?

MsDeploy runCommand 提供程序 - 未经授权的错误

c# - 如何在构建使用包的 C# 代码期间从 NuGet 包复制文本文件?

c# - 如何使用 Targets.wpp 更改 Web.Config 的应用程序设置

msbuild - 使用 msdeploy 和 Visual Studio 2012 构建一次并部署到多个环境

visual-studio-2010 - 从命令行发布 Web 应用程序

c++ - 如何使用CreateWindowEx创建win7风格的按钮

c# - 将 native C++ 移植到 .NET