Web部署项目 - 构建后复制文件

时间:2009-10-08 11:07:58

标签: visual-studio-2008 web-deployment-project

目前我已经设置了一个Web部署项目,它将代码编译到.\Release文件夹中。在构建之后,我想将文件复制到另一台机器上(因为删除了您构建到的任何目录,然后重新创建)。

用于定义要复制的文件的ItemGroup设置如下:

<ItemGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
    <ReleaseFiles Include=".\Release\**\*" />
    <OverrideFiles Include="..\website\App_Code\override\site.com\**\*" />
</ItemGroup>

'website'是用于多个站点的代码,因此在解决方案中设置了多个Web部署项目。

然后,我有AfterBuild目标来复制文件:

<Target Name="AfterBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <Copy SourceFiles="@(ReleaseFiles)" ContinueOnError="true" SkipUnchangedFiles="true" DestinationFiles="@(ReleaseFiles->'\\server\web\site.com\%(RecursiveDir)%(Filename)%(Extension)')" />
    <Copy SourceFiles="@(OverrideFiles)" DestinationFiles="@(OverrideFiles->'\\server\web\site.com\%(RecursiveDir)%(Filename)%(Extension)')" />
</Target>

但是,ReleaseFiles没有被复制,可能是什么原因造成的?我的错误.\TempBuildDir\folder\subfolder - The process cannot access the file because it is being used by another process.每次folder\subfolder都不同,但即使没有显示该消息,文件仍然没有被复制。

问题是,它以前有效。

1 个答案:

答案 0 :(得分:9)

核心问题是,在加载MSBuild文件时,正在评估样本中的ItemGroup - 当时,很可能这些文件还不存在.....

因此,您的“ReleaseFiles”和“OverrideFiles”集合为空,然后不会复制任何内容。

您需要做的是在构建发生后动态创建您的ItemGroups(这里引用的文件确实存在):

<CreateItem Include=".\Release\**\*">
   <Output TaskParameter="Include" ItemName="ReleaseFiles"/>
</CreateItem>
<CreateItem Include="..\website\App_Code\override\site.com\**\*">
   <Output TaskParameter="Include" ItemName="OverrideFiles"/>
</CreateItem>

现在你应该没问题,复制任务应该有效。

马克