2013-12-19 38 views
0

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

我一直试图提到Here in Sayed Ibrahim Hashimi blog ,但他们得到的原始项目文件发布期间被覆盖在我的projectName.wpp.targets包括这些文件作为“额外文件”。

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

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

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

我从下面的日志中找到了(感谢大卫马丁评论)文件没有被覆盖,而是他们被跳过,因为项目中的文件比我想包括的更新:

CopyPipelineFiles:跳过复制F:\站点的额外文件部署\ xxx \ favicon.ico到obj \ xxx \ Package \ PackageTmp \ favicon.ico,文件obj \ xxx \ Package \ PackageTmp \ favicon.ico是最新的

那么有没有办法强制包括这些fil即使他们年龄较大,也是如此?

+0

你确定自己是被取而代之,而不是部署到不同的位置? –

+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> 
相关问题