我在TFS中有一个发布Web zip包的MsBuild Build。 这是我正在使用的命令行:
/t:Build;Package
/p:DeployOnBuild=true;Configuration=Release;
DeployTarget=Package;PackageLocation=\\xxx\MyApp.zip
它正常工作,它也在web.config中替换了预期的参数。 我面临的唯一问题是应用于包文件的权限。 现在文件被部署到: * \ myshare \ myapp \ * 并使用权限设置文件夹: 每个人:完全控制 文件夹中的包具有权限: TFSAdmin:完全控制 没有别的,所以我无法打开或复制它......有什么办法可以避免吗?
答案 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 ".\Logs" /grant Users:(CI)(OI)M /T " ContinueOnError="true" />σ
<Exec Command=" icacls ".\Logs" /grant IIS_IUSRS:(CI)(OI)M /T " ContinueOnError="true" />
</Target>
旁注:如果您使用visual studio的发布/部署远程服务器功能来部署您的网站,那么不用说文件夹权限可能不会被保留,您将不得不使用某种类型的安装后脚本重新应用它们(可能使用&#39; icacls&#39;方法再次显示在这里)。这种安装后的脚本可能应该是WebDeploy的一部分 - 我自己没有使用过WebDeploy,所以你的里程可能因这个特殊方面而有所不同。