在MSBuild中包含不属于项目的文件

时间:2013-06-21 14:50:49

标签: visual-studio-2012 tfs msbuild webdeploy

我正在尝试为我的Web应用程序项目创建自动构建。 我们使用标准CMS项目并调整了部分内容。只有调整过的文件才是我们项目的一部分,但我想在部署包中包含完整的CMS。

所以我创建了一个自定义.targets文件来定义在构建期间包含CMS文件的任务:

<Target Name="GetCMSFiles">
  <ItemGroup>
    <!-- Include the CMS files into the package -->
    <_CMSFiles Include="..\packages\CMSFiles\**\*" />

    <FilesForPackagingFromProject  Include="%(_CMSFiles.Identity)">
      <DestinationRelativePath>
        %(RecursiveDir)%(Filename)%(Extension)
      </DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
  <!-- VS2010 -->
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    GetCMSFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
  <!-- VS2012 -->
  <CopyAllFilesToSingleFolderForMsdeployDependsOn>
    GetCMSFiles;
    $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
  </CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup> 

这很好用,但问题是我们项目中的文件没有被复制到部署文件夹。换句话说,在使用GetCMSFiles任务复制它们之后,它不会覆盖已经存在的文件。

我看到的方式有两种选择:

  1. 强制CopyAllFilesToSingleFolder覆盖部署文件夹中的所有现有文件。

  2. GetCMSFiles任务中的条件只包含项目中尚不存在的文件。

  3. 但我不确定这是否可行以及如何实现这一目标。有什么想法吗?

0 个答案:

没有答案