2

我正在服务器上部署一些文件。但是当我这样做时,构建正在删除驻留在该位置的所有文件和文件夹。我不想从服务器中删除所有文件。我想从目标文件夹中排除一个文件夹(文件夹名为 Temp)。临时文件夹不应在删除其他文件时被删除。怎么做?

这是 TFS 构建定义

<PropertyGroup Condition=" '$(DeployEnvironment)' == 'Dev' "> 
<DeployPath>\\server1\D$\temp\reports</DeployPath> 
</PropertyGroup> 
<Target Name="CoreCompileSolution" /> 
<Target Name="AfterCompile"> 
   <Message Importance ="high" Text="Solution Root: $(SolutionRoot)" />
   <Message Importance ="high" Text="Out Dir: $(OutDir)" />
   <Copy SourceFiles="@(RPTFiles)" DestinationFolder="$(OutDir)_PublishedWebsites\Reports\" /> 
 </Target>
<Target Name="AfterDropBuild" > 
  <CreateItem Exclude="$(DeployPath)\Temp*.*"> 
      <Output ItemName="PreviousDeployment" TaskParameter="Include" /> 
  </CreateItem>
</Target>
4

1 回答 1

1

为什么要使用复制任务?我认为它旨在用于构建期间的本地操作,而不是部署(因为它不会让您有机会轻松配置行为)。

我建议您使用以下选项之一,而不是复制 tsak

  • 非 Web 应用程序- 使用 Robocopy: /XD dirs [dirs]...: 排除与给定名称/路径匹配的目录。XF 和 XD 可以组合使用,例如

    ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S 
    

    请参阅此链接以获取使用指南。您可以从命令行运行它(使用<Exec Command="" >任务,或者使用具有漂亮包装器的MBuiild Community Tasksproject 。

  • Web 应用程序:您应该使用Web Deploy进行部署。您要么使用 MSBuild 集成(VS 2010 及更高版本,请参阅此博客系列以获取有关在 VS2010 NB 上设置和配置的指南:它在 VS 2012 中已大大简化,但我目前没有可分享的链接)或从命令行运行它(在 VS 2010 之前):

    <Exec Command="&quot;$(WebDeployToolPath)&quot; -verb:sync - source:dirPath='$(MSBuildProjectDirectory)\Published\' -dest:dirPath='$(DeployDirectoryLocalPath)',computerName=$(DeployTargetURL),userName='$(DeployUserName)',password='$(Password)',authType='Basic' -skip:skipaction='Delete',objectname='filePath',absolutepath='app_offline.htm' -skip:skipaction='Delete',objectname='filePath',absolutepath='logs\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='logs\\.*' -skip:skipaction='Delete',objectname='filePath',absolutepath='UserFiles\\.*' -skip:skipaction='Delete',objectname='dirPath',absolutepath='UserFiles\\.*' -verbose -allowUntrusted" />

NBskip:skipaction='Delete..用于跳过删除文件和文件夹。

更新 看起来我已经理解了这有点不正确(我想,部署发生在AfterCompile目标中,但是,正如我现在所看到的,TFS 使用CoreDropBuild目标来进行部署。所以我认为,你需要的是CoreDropBuild按照描述覆盖目标:这里。(虽然,我从来没有试过这个)。

您可以使用Copytask 作为线程的作者,也可以根据您的个人喜好使用 Robocopy/webdeploy。

于 2013-03-01T09:37:40.270 回答