具有PackageLocation的MsBuild Deploy删除文件权限

时间:2012-02-24 15:18:47

标签: msbuild web-deployment

我在TFS中有一个发布Web zip包的MsBuild Build。 这是我正在使用的命令行:

/t:Build;Package 
/p:DeployOnBuild=true;Configuration=Release;
DeployTarget=Package;PackageLocation=\\xxx\MyApp.zip

它正常工作,它也在web.config中替换了预期的参数。 我面临的唯一问题是应用于包文件的权限。 现在文件被部署到: * \ myshare \ myapp \ * 并使用权限设置文件夹: 每个人:完全控制 文件夹中的包具有权限: TFSAdmin:完全控制 没有别的,所以我无法打开或复制它......有什么办法可以避免吗?

3 个答案:

答案 0 :(得分:0)

到目前为止,如果没有解决方法,似乎无法解决问题。 通过在构建过程结束时在工作流中执行批处理文件,我找到了一种简单易行的解决方法。 在批处理文件中,我使用非常旧的 ICACLS 来重新设置权限:

ICACLS \\xxx\MyPackage.zip /GRANT Everyone:F
ICACLS \\xxx\MyPackage.zip /GRANT Users:F

答案 1 :(得分:0)

添加MSBuild .proj文件:

<Exec Command="icacls "\\xxx\MyApp.zip" /grant User:F" ContinueOnError="true" />

一系列简单的权利:                 F - 完全访问权限                 M - 修改访问权限                 RX - 读取和执行访问                 R - 只读访问权限                 W - 只写访问

答案 2 :(得分:0)

如果您想让网站可以访问某个文件夹,您可以将以下代码段放入&#34; PostBuild&#34; .csproj底部的事件(您需要通过文本编辑器手动编辑.csproj文件):

<Target Name="AfterBuild">
  <!-- grant everyone the modify right recursively even for files and folders created dynamically in the future -->
  <!-- note the use of (OI) and (CI) flags which stand for object inherit & container inherit    these flags      -->
  <!-- indicate that subordinate containers will inherit the same access control element or ace   this means that -->
  <!-- files and folders created in the future within the targeted folder will get the same permissions            -->

  <Exec Command="  icacls   &quot;.\Logs&quot;              /grant      Users:(CI)(OI)M  /T  "  ContinueOnError="true" />σ
  <Exec Command="  icacls   &quot;.\Logs&quot;              /grant  IIS_IUSRS:(CI)(OI)M  /T  "  ContinueOnError="true" />

</Target>

旁注:如果您使用visual studio的发布/部署远程服务器功能来部署您的网站,那么不用说文件夹权限可能不会被保留,您将不得不使用某种类型的安装后脚本重新应用它们(可能使用&#39; icacls&#39;方法再次显示在这里)。这种安装后的脚本可能应该是WebDeploy的一部分 - 我自己没有使用过WebDeploy,所以你的里程可能因这个特殊方面而有所不同。