![](/img/trans.png)
[英]Publishing ASP.NET MVC application to a web host - deploys files in the VS project structure instead of the application
[英]Replace VS project files when doing web publishing (Web Deploy)
我遇到了在发布期间需要用其他自定义文件替换项目中某些文件的情况。 案例是我们有几个使用相同代码库的网站。 但是,某些网站需要自定义版本的已部署文件(例如favicon.ico,Error.aspx…)。
我一直试图将这些文件作为“额外文件”包含在我的projectName.wpp.targets中,如在Sayed Ibrahim Hashimi博客中在此处提到的那样,
但是它们在发布过程中被原始项目文件覆盖。
从发布输出中可以看到,“额外文件”已包含在包中,但随后被项目中的相同文件替换了。
有没有办法告诉MS Deploy在包含项目内容文件之后包括我的文件,以使我的文件被覆盖?
------------更新------------------
我从下面的日志中发现(由于David Martin的评论),文件没有被覆盖,而是被跳过了,因为项目中的文件比我要包含的文件新:
CopyPipelineFiles:跳过站点部署F:\\ Extra Files \\ xxx \\ favicon.ico的复制到obj \\ xxx \\ Package \\ PackageTmp \\ favicon.ico,文件obj \\ xxx \\ Package \\ PackageTmp \\ favicon.ico的更新
因此,有没有办法强制将这些文件包括在包中较旧的文件中?
好,所以我已经找到了解决办法,如果其他人遇到此问题,我会在这里发布,但我欢迎其他解决方案!
我的问题中所述的问题是由于我要包含在包中的文件比我项目中的文件要旧。 因此,我需要找到一种更新上次修改日期的方法。
我发现有一个“触摸”任务可以完全做到这一点: 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>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.