在进行Web发布时替换VS项目文件(Web部署)

时间:2013-12-19 21:42:53

标签: asp.net msbuild msdeploy webdeploy

我遇到了在使用其他自定义文件发布期间需要替换项​​目中的某些文件的情况。案例是我们有几个使用相同代码库的网站。但是,某些网站需要部署文件的自定义版本(例如favicon.ico,Error.aspx ...)。

我一直试图将这些文件作为“额外文件”包含在我的projectName.wpp.targets中,如上所述Here in Sayed Ibrahim Hashimi blog 但在发布期间它们会被原始项目文件覆盖。

<击>

我可以从发布输出中看到“额外文件”包含在包中,但随后它们将被项目中的相同文件替换。

有没有办法告诉MS Deploy在包含项目内容文件后包含我的文件,以便我的文件覆盖?

------------更新------------------

我从下面的日志中发现(感谢David Martin的评论),文件没有被覆盖,而是被跳过,因为项目中的文件比我想要包含的文件更新:

CopyPipelineFiles:跳过复制F:\ Extra Sites For Sites Deployment \ xxx \ favicon.ico到obj \ xxx \ Package \ PackageTmp \ favicon.ico,File obj \ xxx \ Package \ PackageTmp \ favicon.ico是最新的

有没有办法强制包含这些文件,即使它们在包中较旧?

1 个答案:

答案 0 :(得分:1)

好的,所以我找到了一个解决方法,如果其他人遇到这个问题,我会在这里发帖,但我欢迎任何其他解决方案!

我的问题中陈述的问题是由我想要包含在我的包中的文件比我项目中的文件旧。所以我需要找到一种方法来更新上次修改日期。

我发现有一个“触摸”任务就是这样做的: http://msdn.microsoft.com/en-us/library/37fwbyt5.aspx

所以这就是我最终在我的剧本中所做的:

  <ItemGroup>
    <Files Include="F:\Files For Sites Deployment\xxx\**\*" />
  </ItemGroup>

  <PropertyGroup>
    <CopyAllFilesToSingleFolderForMsdeployDependsOn>
      TouchIncludeFiles;
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
      </CopyAllFilesToSingleFolderForMsdeployDependsOn>
  </PropertyGroup>

  <Target Name="TouchIncludeFiles">
    <Touch Files="@(Files)" ForceTouch="true"></Touch>
  </Target>
  <Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include="@(Files)" />
      <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>