2009-10-08 13 views
8

Actuellement, j'ai configuré un projet de déploiement Web qui compile le code dans le dossier .\Release. Après la construction je veux copier les fichiers sur une autre machine (parce que n'importe quel répertoire que vous construisez est supprimé puis recréé).Projet de déploiement Web - Copie de fichiers après la création

Le ItemGroup pour définir les fichiers à copier est configuré comme suit:

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

« site » est le code qui est utilisé pour plusieurs sites, donc il y a plusieurs projets de déploiement Web mis en place au sein de la solution.

Ensuite, j'ai la cible de AfterBuild pour copier les fichiers:

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

Cependant, les ReleaseFiles ne sont pas copiés, ce qui peut être la cause de cela? J'ai eu l'erreur .\TempBuildDir\folder\subfolder - The process cannot access the file because it is being used by another process.folder\subfolder peut être différent à chaque fois, mais même si ce message n'apparaît pas, les fichiers ne sont toujours pas copiés.

Le problème est, il a travaillé auparavant.

Répondre

9

Le problème de base est que le ItemGroup dans votre échantillon est en cours d'évaluation au moment où le fichier MSBuild est chargé - et à ce moment-là, très probablement, ces fichiers n'existent pas encore .....

Par conséquent vos collections "ReleaseFiles" et "OverrideFiles" sont vides, et rien n'est copié.

Ce que vous devez faire est de créer vos ItemGroups dynamiquement après la construction est arrivé (et les fichiers référencés ici sont bien présents):

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

Maintenant, vous devriez être très bien, et la tâche de copie doit travail.

Marc

+0

Est-ce que CreateItem va sous ItemGroup ou Target? – SamWM

+0

Vous devriez le mettre dans la cible 'AfterBuild', avant les tâches de copie. –

+0

Qui l'a fixé pour moi – SamWM

Questions connexes