2009-10-08 34 views
8

Hiện tại tôi đã thiết lập Dự án triển khai web để biên dịch mã vào thư mục .\Release. Sau khi xây dựng tôi muốn sao chép các tập tin trên một máy khác (vì bất kỳ thư mục bạn xây dựng để xóa sau đó được tái tạo).Dự án triển khai Web - Sao chép tệp sau khi tạo

Các ItemGroup để xác định những file nào để copy được thiết lập như sau:

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

'trang web' là mã được sử dụng cho nhiều trang web, vì vậy có một số dự án triển khai web thiết lập trong giải pháp.

Sau đó, tôi có mục tiêu AfterBuild để sao chép các tập tin:

<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> 

Tuy nhiên, ReleaseFiles không được sao chép, những gì có thể là nguyên nhân của điều đó không? Tôi đã gặp lỗi .\TempBuildDir\folder\subfolder - The process cannot access the file because it is being used by another process. trong đó folder\subfolder có thể khác nhau mỗi lần, nhưng ngay cả khi thông báo đó không xuất hiện các tệp vẫn không được sao chép.

Vấn đề là, nó đã hoạt động trước đó.

Trả lời

9

Vấn đề cốt lõi là ItemGroup trong mẫu của bạn đang được đánh giá vào thời điểm đó các tập tin MSBuild được nạp - và tại thời điểm đó, nhiều khả năng, các tập tin không tồn tại được nêu .....

Do đó các bộ sưu tập "ReleaseFiles" và "OverrideFiles" của bạn trống, và sau đó không có gì được sao chép.

Những gì bạn cần làm là tạo ItemGroups của bạn tự động sau xây dựng đã xảy ra (và các tập tin tham chiếu ở đây là thực hiện):

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

Bây giờ bạn cần sử dụng tốt, và nhiệm vụ sao chép nên công việc.

Marc

+0

CreateItem có nằm trong ItemGroup hoặc Target không? – SamWM

+0

Bạn nên đặt nó vào mục tiêu 'AfterBuild', trước nhiệm vụ Sao chép. –

+0

Điều đó đã sửa nó cho tôi – SamWM

Các vấn đề liên quan