1

我对 MSBuild 还很陌生,发现它的强大功能同时使我们的许多流程自动化。我目前正在为我们的 Web 项目设置我们的 TARGETS 文件,并且我希望在应用程序以 DEBUG 模式构建时设置一个全局权限 ACL。

我知道,这些应该在 Debug.pubxml 中,(插入发布配置文件的名称等)

在 VS 中,当应用程序使用 IIS Express 运行时,整个应用程序都是可写的,这有利于调试。在调试配置文件中使用 WebDeploy 将应用程序部署到 IIS 时,我想提供相同的行为。

我关注了Sayed 的博客,该博客概述了如何设置文件夹权限,并最终转移到了以下解决方案——它为在任何文件夹上设置权限提供了一个很好的可重用模式。微软 IIS 论坛帖子

但是,根据我从这两个示例中学到的知识,我无法在部署目录上成功设置“Read,Write”aclAccess。我认为应该是 $(_MSDeployDirPath_FullPath)。

作为一个子说明,对于构建这些 MSBuild 文件有什么建议吗?例如,拆分组件以便它们可重用,或者命名模式以使开发人员更容易理解正在发生的事情?

最好的祝愿,劳伦斯

4

2 回答 2

1

我自己对 MsDeploy 任务有问题,我直接选择了 Msdeploy 可执行文件。这对我有用。

 <Exec Command="msdeploy -verb:sync -source:setacl -dest:setacl=&quot;%(FoldersWithSpecialPermissions.Identity)&quot;,setAclUser=NetworkService,setAclAccess=Modify,computerName=$(ComputerName),UserName=$(UserName),password=$(Password),authtype=basic -allowUntrusted" WorkingDirectory="$(MSDeployPath)" />

关于模式,最好的办法是敞开心扉

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0***.targets

并检查 Microsoft 如何组织构建模板。

我希望这会有所帮助

于 2013-02-23T00:12:21.747 回答
1

下面的帖子和Sayed 通过 Twitter 提供的帮助导致了一个解决方案并更好地理解了这两个解决方案。

在这种情况下,MSBuild 规则放置在“Debug.pubxml”文件中。这是要求整个 IIS 目录可写的发布配置文件。要使其成为整个项目的“默认”行为,请放置在 {project-name}.wpp.targets 文件中。

进一步阅读:关于发布配置文件 (.pubxml) 的 MSDN 文章

+1 如上所述,读取 MSBuild *.targets 文件非常有用。

<!-- Make entire IIS directory writable -->
<Target Name="SetupCustomAcls" AfterTargets="AddIisSettingAndFileContentsToSourceManifest">
<Message Text="SetupCustomAcls" Importance="high"/>
<ItemGroup>
  <MsDeploySourceManifest Include="setAcl">
    <Path>$(_MSDeployDirPath_FullPath)</Path>
    <setAclAccess>Modify</setAclAccess>
    <setAclResourceType>Directory</setAclResourceType>
    <AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
  </MsDeploySourceManifest>
</ItemGroup>
 </Target>

 <Target Name="DeclareCustomParameters" AfterTargets="AddIisAndContentDeclareParametersItems">
<Message Text="DeclareCustomParameters" Importance="high"/>
<ItemGroup>
  <MsDeployDeclareParameters Include="CustomSetAclParam">
    <Kind>ProviderPath</Kind>
    <Scope>setAcl</Scope>
    <Match>^$(_EscapeRegEx_MSDeployDirPath)$</Match>
    <Description>Add write permission to the root folder.</Description>
    <DefaultValue>{$(_MsDeployParameterNameForContentPath)}</DefaultValue>
    <Value>$(_DestinationContentPath)</Value>
    <Tags>Hidden</Tags>
    <Priority>$(VsSetAclPriority)</Priority>
    <ExcludeFromSetParameter>True</ExcludeFromSetParameter>
  </MsDeployDeclareParameters>
</ItemGroup>
  </Target>
于 2013-03-13T16:11:01.727 回答