我有一个 Web 表单应用程序 (Visual Studio 2010),其中包含一个现有的 wpp.targets 文件,它可以成功地执行 LESS 预处理、资源缩小/捆绑、web.config 加密等操作。
只需右键单击 Web 应用程序并选择“发布 - 文件系统”选项,我始终能够很好地进行部署。
我最近决定尝试自动设置应用程序中特定文件夹的 ACL 权限。这导致我从文件系统发布选项更改为 Web 部署选项(在服务器上安装和配置 Web Deploy 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>
但是我显然遗漏了一些东西,因为我单击了 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 ...
所以它似乎是在文件夹上设置 acl(由于某种原因两次),但是当我去查看远程服务器上的文件夹时,权限还没有被应用。
我在这里想念什么?
我不想为以后/手动部署或任何涉及构建服务器的东西构建一个包。我只是手动尝试发布-> Web 部署。
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>
因此,您可以看到 IDAutomation 文件夹的 setAcl 元素上没有 setAclUser。希望这会成为某人的线索?
再次感谢-