部署文件时出现MSBuild问题

部署文件时出现MSBuild问题,msbuild,Msbuild,我正在服务器上部署一些文件。但当我这样做时,build将删除驻留在该位置的所有文件和文件夹。我不想删除服务器上的所有文件。我想从目标文件夹中排除一个文件夹(文件夹名称为Temp)。删除其他文件时不应删除临时文件夹。怎么做 下面是TFS构建定义 <PropertyGroup Condition=" '$(DeployEnvironment)' == 'Dev' "> <DeployPath>\\server1\D$\temp\reports</DeployPath&

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

\\server1\D$\temp\reports

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

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

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

    ROBOCOPY c:\source d:\dest /XF *.doc *.xls /XD c:\unwanted /S 
    
    有关使用指南,请参阅。您可以从命令行(使用
    任务)运行它,也可以使用具有良好包装的

  • Web应用程序:您应该在部署中使用。您可以使用MSBuild集成(VS 2010及更高版本,请参阅以获取VS2010上的设置和配置指南。注意:在VS 2012中,该集成已大大简化,但我目前没有可共享的链接),也可以从命令行运行它(在VS 2010之前):

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

更新 看起来我认为这有点不正确(我想,部署发生在编译后
target,但是,正如我现在看到的,TFS使用
CoreDropBuild
target进行部署)。 所以我认为,您需要的是覆盖所描述的
CoreDropBuild
target:(尽管我从未尝试过)


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

您是如何部署这些文件的?您使用的是TFS生成定义、从Visual Studio发布还是其他什么?您好,我使用的是TFS生成定义。这是相同的代码。我没有选项在my TFS build for“ROBOCOPY”选项中。嗯,您可以编辑上面粘贴的msbuild文件,不是吗?请查看此链接以了解覆盖CoreDropBuild任务的情况。添加了一个更新,其中包含指向MSDN论坛的链接,其中说明了如何通过覆盖CoreDropBuild目标排除文件