Gute Frage. Ich habe gerade einen sehr detaillierten Blogeintrag dazu im Web Deployment Tool (MSDeploy) veröffentlicht: Build Package mit zusätzlichen Dateien oder ohne bestimmte Dateien .
Hier ist die Zusammenfassung. Nachdem ich Dateien eingeschlossen habe, zeige ich, wie man auch Dateien ausschließt.
Einschließlich zusätzlicher Dateien
Das Einfügen zusätzlicher Dateien in das Paket ist etwas schwieriger, aber immer noch kein Problem, wenn Sie mit MSBuild vertraut sind und wenn Sie dies nicht tun, lesen Sie dies. Dazu müssen wir uns in den Teil des Prozesses einbinden, der die Dateien zum Verpacken sammelt. Das Ziel, das wir erweitern müssen, heißt CopyAllFilesToSingleFolder. Dieses Ziel verfügt über die Abhängigkeitseigenschaft PipelinePreDeployCopyAllFilesToOneFolderDependsOn, die wir abrufen und in unser eigenes Ziel einfügen können. Also werden wir ein Ziel namens CustomCollectFiles erstellen und dieses in den Prozess einfügen. Dies erreichen wir mit folgendem (denken Sie nach der Importanweisung daran).
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>
<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForMsdeployDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>
Dadurch wird unser Ziel zum Prozess hinzugefügt. Jetzt müssen wir das Ziel selbst definieren. Angenommen, Sie haben einen Ordner mit dem Namen "Zusätzliche Dateien", der sich 1 Ebene über Ihrem Webprojekt befindet. Sie möchten alle diese Dateien einschließen. Hier ist das CustomCollectFiles-Ziel, das wir anschließend diskutieren.
<Target Name="CustomCollectFiles">
<ItemGroup>
<_CustomFiles Include="..\Extra Files\**\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Extra Files\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>
Hier habe ich das Element _CustomFiles erstellt und im Include-Attribut angewiesen, alle Dateien in diesem Ordner und alle darunter liegenden Ordner aufzunehmen. Wenn von einer Chance müssen Sie ausschließen etwas aus dieser Liste, fügen Sie ein Exclude
Attribut zu _CustomFiles
.
Dann benutze ich dieses Element, um das FilesForPackagingFromProject-Element zu füllen. Dies ist das Element, mit dem MSDeploy tatsächlich zusätzliche Dateien hinzufügt. Beachten Sie auch, dass ich den Metadaten-Wert DestinationRelativePath deklariert habe. Dies bestimmt den relativen Pfad, den es in das Paket einfügen wird. Ich habe hier die Anweisung Extra Files% (RecursiveDir)% (Filename)% (Extension) verwendet. Das heißt, Sie platzieren es an derselben relativen Position im Paket wie im Ordner "Zusätzliche Dateien".
Dateien ausschließen
Wenn Sie die Projektdatei einer mit VS 2010 erstellten Webanwendung unten öffnen, finden Sie eine Zeile mit.
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
Übrigens können Sie die Projektdatei in VS öffnen. Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Projekt entladen. Klicken Sie dann mit der rechten Maustaste auf das entladene Projekt und wählen Sie Projekt bearbeiten.
Diese Erklärung enthält alle Ziele und Aufgaben, die wir benötigen. Die meisten unserer Anpassungen sollten nach diesem Import erfolgen, wenn Sie nicht sicher sind, ob nachher! Wenn Sie also Dateien ausschließen müssen, gibt es einen Elementnamen, ExcludeFromPackageFiles, der dazu verwendet werden kann. Angenommen, Sie haben eine Datei mit dem Namen Sample.Debug.xml in Ihrer Webanwendung, möchten jedoch, dass diese Datei aus den erstellten Paketen ausgeschlossen wird. Sie können das Snippet unten nach dieser Importanweisung platzieren.
<ItemGroup>
<ExcludeFromPackageFiles Include="Sample.Debug.xml">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
Wenn Sie das Auffüllen dieses Elements deklarieren, werden die Dateien automatisch ausgeschlossen. Beachten Sie hier die Verwendung der FromTarget
Metadaten. Ich werde hier nicht darauf eingehen, aber Sie sollten wissen, dass Sie das immer spezifizieren müssen.