2009-10-08 63 views
8

目前我已經建立了一個Web部署項目,它將代碼編譯到.\Release文件夾中。生成後,我想將文件複製到另一臺機器上(因爲無論您構建的目錄是刪除還是重新創建)。Web部署項目 - 在生成後複製文件

的的ItemGroup用於定義要複製的文件被設置如下:

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

「網站」是用於多個網站的代碼,所以有解決方案中設置了多個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可以每次都不同,但即使該消息不出現,文件仍然不會被複制。

問題是,它已經工作過。

回答

9

的核心問題是,你的樣品中的ItemGroup被當時評估的MSBuild的文件被加載 - 在那個時候,最有可能的,這些文件還不存在.....

因此你的「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> 

現在你應該罰款,並將複印任務應該工作。

Marc

+0

CreateItem是否在ItemGroup或Target下? – SamWM 2009-10-08 12:00:25

+0

你應該把它放到'AfterBuild'目標中,在Copy任務之前。 – 2009-10-08 12:01:44

+0

爲我修好了 – SamWM 2009-10-08 14:29:24