2009-10-08 16 views
8

Şu anda .\Release klasörüne kod derleyen bir Web Dağıtım Projesi kurdum. Oluşturulduktan sonra dosyaları başka bir makineye kopyalamak istiyorum (çünkü oluşturduğunuz dizin silinir ve yeniden oluşturulur).Web Dağıtım Projesi - Oluşturulduktan Sonra Dosyaları Kopyalayın

şöyle kurulduğundan kopyalamak dosyaları tanımlamaya yönelik ItemGroup:

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

'web sitesi' Birden çok site için kullanılan kod, bu nedenle çözüm içinde kurmak birçok web dağıtım projesi vardır.

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

Ancak ReleaseFiles kopyalanmaz, bunun nedeni ne olabilir:

Sonra ben dosyalarını kopyalamak için AfterBuild hedef var? .\TempBuildDir\folder\subfolder - The process cannot access the file because it is being used by another process. hatası her zaman farklı olabilir, ancak bu ileti görünmese bile dosyalar hala kopyalanmıyor.

Sorun, daha önce çalıştı.

cevap

9

çekirdek sorun sizin numunede ItemGroup MSBuild dosyası yüklenir anda değerlendirilmektedir olmasıdır - ..... ve o zaman, büyük olasılıkla, bu dosyalar henüz var olmayan

Bu nedenle "ReleaseFiles" ve "OverrideFiles" koleksiyonlarınız boş ve hiçbir şey kopyalanmıyor. Yapmanız gereken şey

inşa oldu (ve burada başvurulan dosyalar aslında mevcut) dinamik sizin ItemGroups sonra yaratmaktır:

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

Şimdi iyi olmalı ve kopyalama görevi olmalıdır iş.

Marc

+0

CreateItem ItemGroup veya Target? – SamWM

+0

Kopyalama görevlerinden önce 'AfterBuild 'hedefine koymalısınız. –

+0

Bu benim için de düzeltildi – SamWM

İlgili konular