我正在项目 wpp.targets 文件的 ItemGroup 中添加这个项目。
<MsDeploySourceManifest Include="setAcl">
<Path>%windir%\TEMP</Path>
<setAclUser>IIS_IUSRS</setAclUser>
<setAclAccess>Read,Write,Modify</setAclAccess>
<setAclResourceType>Directory</setAclResourceType>
<AdditionalProviderSettings>setAclUser;setAclResourceType;setAclAccess</AdditionalProviderSettings>
</MsDeploySourceManifest>
这在参数部分
<MsDeployDeclareParameters Include="TempFolderPermissionSetAclParam">
<Kind>ProviderPath</Kind>
<Scope>setAcl</Scope>
<Description>Add read, write permission for IIS_IUSRS to the temp folder.</Description>
<DefaultValue>%windir%\TEMP</DefaultValue>
<Value>%windir%\TEMP</Value>
<Tags>Hidden</Tags>
<Priority>$(VsSetAclPriority)</Priority>
<ExcludeFromSetParameter>True</ExcludeFromSetParameter>
</MsDeployDeclareParameters>
它在 list xml 文件中生成这一行
但是有一条错误信息说: 错误:“setAcl”时必须指定“setAclUser”设置的值 provider 与物理路径一起使用。
这里缺少什么?
最佳答案
您问这个问题已经有一段时间了,但从表面上看,这看起来或多或少是正确的:指定绝对路径的关键点是您在 AdditionalProviderSettings 中包含 setAclUser,以及 setAclUser 的元素。
最终,虽然您的 SourceManifest 文件在构建包时可能看起来是正确的,但似乎重要的是创建的 zip 中包含的 archive.xml 文件中 setAcl 元素的 setAclUser 设置。打开它并确保存在您期望的 setAclUser 值。
此外,Visual Studio 在涉及 MSBuild 文件的地方自由使用缓存;实际上,Visual Studio 似乎只会尊重对 pubxml 文件和项目文件(如 csproj)所做的更改。对任何其他目标文件进行更改时,您应该关闭 Visual Studio 并在每次编辑后重新打开。这可以解释为什么您看似正确的解决方案不起作用:它可能只是过时的目标文件缓存。
关于msdeploy 如何将 IIS_IUSRS 的读/写权限授予 c :\windows\temp folder,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16989911/