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

Sam*_*mWM 8 web-deployment-project visual-studio-2008

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

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

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

"网站"是用于多个站点的代码,因此在解决方案中设置了多个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>
Run Code Online (Sandbox Code Playgroud)

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

问题是,它以前有用过.

mar*_*c_s 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>
Run Code Online (Sandbox Code Playgroud)

现在你应该没问题,复制任务应该可行.

  • 这种做事方式已被弃用.从.NET 3.5开始,您可以在<.目标>中放置一个<ItemGroup>来获得相同的结果,从http://msdn.microsoft.com/en-us/library/s2y3e43x.aspx开始. (2认同)