部署文件时MSBuild问题

时间:2013-02-28 23:36:56

标签: msbuild tfs2008

我正在服务器上部署一些文件。但是当我这样做时,build正在删除驻留在该位置的所有文件和文件夹。我不想删除服务器上的所有文件。我想从目标文件夹中排除一个文件夹(文件夹名称为Temp)。删除其他文件时不应删除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>

1 个答案:

答案 0 :(得分:1)

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

我建议您使用以下选项之一

而不是复制tsak
  • 非网络应用 - 使用Robocopy: /XD dirs [dirs]...:eXclude与给定名称/路径匹配的目录。  XF和XD可以组合使用,例如

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

    请参阅this link了解使用指南。您可以从命令行运行它(使用<Exec Command="" >任务,也可以使用具有良好包装的MBuiild Community Tasksproject

  • Web应用程序:您应该使用Web Deploy进行部署。您可以使用MSBuild集成(VS 2010及更高版本,请参阅this blog series以获取有关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" />

NB使用skip:skipaction='Delete..跳过删除文件和文件夹。

<强>更新 看起来我已经不知道这有点不正确(我想,部署发生在AfterCompile目标中,但是,正如我现在看到的,TFS使用CoreDropBuild目标来进行部署。 所以我认为,您需要的是覆盖CoreDropBuild目标,如下所述:here。 (虽然,我从未尝试过这个)。

您可以使用Copy任务作为主题的作者,也可以根据个人喜好使用Robocopy / webdeploy。