2009-10-08 4 views
8

Derzeit habe ich ein Web-Bereitstellungsprojekt eingerichtet, das Code in den Ordner .\Release kompiliert. Nach dem Build möchte ich die Dateien auf einen anderen Computer kopieren (da das Verzeichnis, in dem Sie es erstellen, gelöscht und dann neu erstellt wird).Web-Bereitstellungsprojekt - Dateien nach Erstellung kopieren

Die ItemGroup für die definiert, welche bis zu kopieren Dateien wie folgt festgelegt:

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

‚Webseite‘ ist Code, der für mehrere Standorte verwendet wird, so gibt es in der Lösung mehrere Web-Bereitstellungsprojekte einzurichten.

Dann habe ich das Ziel Afterbuild die Dateien zu kopieren:

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

Allerdings sind die ReleaseFiles nicht kopiert, was die Ursache dafür sein können? Ich habe den Fehler .\TempBuildDir\folder\subfolder - The process cannot access the file because it is being used by another process. gehabt, wo folder\subfolder jedes Mal unterschiedlich sein kann, aber selbst wenn diese Nachricht nicht erscheint, werden die Akten noch nicht kopiert.

Problem ist, es hat vorher funktioniert.

Antwort

9

Der Kern Problem ist, dass die ItemGroup in Ihrer Probe zum Zeitpunkt der MSBuild ausgewertet wird Datei geladen - und zu diesem Zeitpunkt höchstwahrscheinlich diese Dateien existieren noch nicht .....

Daher sind Ihre Sammlungen "ReleaseFiles" und "OverrideFiles" leer und nichts wird kopiert.

Was Sie tun müssen, ist Ihre ItemGroups dynamisch erstellen nach der Build ist passiert (und die hier aufgeführten Dateien sind in der Tat vorhanden):

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

Jetzt sollten Sie sich gut, und die Kopieraufgabe sollte Arbeit.

Marc

+0

Geht CreateItem unter ItemGroup oder Target? – SamWM

+0

Sie sollten es in das 'AfterBuild'-Ziel vor den Kopieraufgaben einfügen. –

+0

Das hat es für mich behoben – SamWM