2009-10-08 10 views
8

Obecnie zostałem skonfigurowany projekt wdrażania sieci Web, który kompiluje kod do folderu .\Release. Po zakończeniu kompilacji chcę skopiować pliki na inny komputer (ponieważ katalog, w którym się tworzy, jest usuwany, a następnie ponownie tworzony).Projekt wdrażania sieci Web - kopiowanie plików po utworzeniu

ItemGroup za określenie, które pliki do skopiowania jest skonfigurowana w następujący sposób:

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

„Witryna” to kod, który jest używany na wielu witrynach, więc istnieje kilka projektów Web Deployment utworzone w roztworze.

Wtedy, mam cel AfterBuild skopiować pliki:

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

Jednak ReleaseFiles nie są kopiowane, co może być przyczyną tego? Miałem błąd .\TempBuildDir\folder\subfolder - The process cannot access the file because it is being used by another process., gdzie folder\subfolder może być za każdym razem inny, ale nawet gdy ta wiadomość nie pojawi się, pliki nadal nie są kopiowane.

Problem polega na tym, że zadziałało wcześniej.

Odpowiedz

9

Rdzeń problemem jest to, że ItemGroup w próbce jest oceniany w czasie MSBuild plik zostanie załadowany - i w tym czasie, najprawdopodobniej, te pliki nie istnieją jeszcze .....

W związku z tym kolekcje "ReleaseFiles" i "OverrideFiles" są puste, a następnie nic nie zostanie skopiowane.

Co trzeba zrobić, to stworzyć swój ItemGroups dynamicznie po kompilacja działo się (i pliki przywoływane tutaj są rzeczywiście obecny):

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

Teraz powinno być w porządku, a zadanie kopia powinna praca.

Marc

+0

Czy CreateItem znajduje się w ItemGroup lub Target? – SamWM

+0

Powinieneś umieścić go w celu 'AfterBuild', przed zadaniami kopiowania. –

+0

Naprawiłem to dla mnie. – SamWM

Powiązane problemy