目前我已经设置了一个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
都不同,但即使没有显示该消息,文件仍然没有被复制。
问题是,它以前有效。
答案 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>
现在你应该没问题,复制任务应该有效。
马克