Ausschließen von Dateien und Ordnern von der Bereitstellung
von Jason Lee
In diesem Thema wird beschrieben, wie Sie Dateien und Ordner aus einem Webbereitstellungspaket ausschließen können, wenn Sie ein Webanwendungsprojekt erstellen und packen.
Dieses Thema ist Teil einer Reihe von Tutorials, die sich auf die Unternehmensbereitstellungsanforderungen eines fiktiven Unternehmens namens Fabrikam, Inc. beziehen. In dieser Tutorialreihe wird eine Beispiellösung – die Contact Manager-Lösung – verwendet, um eine Webanwendung mit einem realistischen Maß an Komplexität darzustellen, einschließlich einer ASP.NET MVC 3-Anwendung, einem WCF-Dienst (Windows Communication Foundation) und einem Datenbankprojekt.
Die Bereitstellungsmethode im Mittelpunkt dieser Tutorials basiert auf dem unter Grundlegendes zur Projektdatei beschriebenen Ansatz für geteilte Projektdateien, bei dem der Buildprozess von zwei Projektdateien gesteuert wird– eine mit Buildanweisungen, die für jede Zielumgebung gelten, und eine mit umgebungsspezifischen Build- und Bereitstellungseinstellungen. Zur Buildzeit wird die umgebungsspezifische Projektdatei in die umgebungsunabhängige Projektdatei zusammengeführt, um einen vollständigen Satz von Buildanweisungen zu bilden.
Überblick
Wenn Sie ein Webanwendungsprojekt in Visual Studio 2010 erstellen, können Sie mit der Web Publishing Pipeline (WPP) diesen Buildprozess erweitern, indem Sie Ihre kompilierte Webanwendung in ein bereitstellungsfähiges Webpaket packen. Anschließend können Sie das IIS-Webbereitstellungstool (Web Deploy) verwenden, um dieses Webpaket auf einem IIS-Remotewebserver bereitzustellen oder das Webpaket manuell über den IIS-Manager zu importieren. Dieser Verpackungsprozess wird unter Erstellen und Verpacken von Webanwendungsprojekten erläutert.
Wie steuern Sie also, was in Ihrem Webpaket enthalten ist? Die Projekteinstellungen in Visual Studio bieten über die zugrunde liegende Projektdatei ausreichende Kontrolle für viele Szenarien. In einigen Fällen können Sie jedoch den Inhalt Ihres Webpakets an bestimmte Zielumgebungen anpassen. Sie können beispielsweise einen Ordner für Protokolldateien einschließen, wenn Sie Ihre Anwendung in einer Testumgebung bereitstellen, aber den Ordner ausschließen, wenn Sie die Anwendung in einer Staging- oder Produktionsumgebung bereitstellen. In diesem Thema erfahren Sie, wie Sie dies tun.
Was wird standardmäßig eingeschlossen?
Wenn Sie die Eigenschaften Ihres Webanwendungsprojekts in Visual Studio konfigurieren, können Sie in der Liste Zu bereitstellende Elemente auf der Seite Paket/Veröffentlichung angeben, was Sie in Ihr Webbereitstellungspaket einschließen möchten. Standardmäßig ist dies auf Nur Dateien festgelegt, die zum Ausführen dieser Anwendung erforderlich sind.
Wenn Sie Nur Dateien zum Ausführen dieser Anwendung auswählen, versucht der WPP zu ermitteln, welche Dateien dem Webpaket hinzugefügt werden sollen. Dies schließt Folgendes ein:
- Alle Buildausgaben für das Projekt.
- Alle Dateien, die mit einer Buildaktion von Content gekennzeichnet sind.
Hinweis
Die Logik, die bestimmt, welche Dateien eingeschlossen werden sollen, ist in dieser Datei enthalten:
%PROGRAMFILES%\MSBuild\Microsoft\VisualStudio\v10.0\Web\ Microsoft.Web.Publishing.OnlyFilesToRunTheApp.targets
Ausschließen bestimmter Dateien und Ordner
In einigen Fällen benötigen Sie eine differenziertere Kontrolle darüber, welche Dateien und Ordner bereitgestellt werden. Wenn Sie im Voraus wissen, welche Dateien Sie ausschließen möchten und der Ausschluss für alle Zielumgebungen gilt, können Sie einfach die Buildaktion jeder Datei auf Keine festlegen.
So schließen Sie bestimmte Dateien von der Bereitstellung aus
- Klicken Sie im fenster Projektmappen-Explorer mit der rechten Maustaste auf die Datei, und klicken Sie dann auf Eigenschaften.
- Wählen Sie im Fenster Eigenschaften in der Zeile Buildaktion die Option Keine aus.
Dieser Ansatz ist jedoch nicht immer bequem. Beispielsweise können Sie je nach Zielumgebung und von außerhalb von Visual Studio variieren, welche Dateien und Ordner enthalten sind. Sehen Sie sich beispielsweise in der Contact Manager-Beispiellösung den Inhalt des Projekts ContactManager.Mvc an:
- Der Interne Ordner enthält einige SQL-Skripts, die der Entwickler verwendet, um lokale Datenbanken für Entwicklungszwecke zu erstellen, zu löschen und aufzufüllen. Nichts in diesem Ordner sollte in einer Staging- oder Produktionsumgebung bereitgestellt werden.
- Der Ordner Skripts enthält mehrere JavaScript-Dateien. Viele dieser Dateien sind nur enthalten, um das Debuggen zu unterstützen oder IntelliSense in Visual Studio bereitzustellen. Einige dieser Dateien sollten nicht in Staging- oder Produktionsumgebungen bereitgestellt werden. Sie können sie jedoch in einer Entwicklertestumgebung bereitstellen, um die Problembehandlung zu erleichtern.
Obwohl Sie Ihre Projektdateien so bearbeiten könnten, dass bestimmte Dateien und Ordner ausgeschlossen werden, gibt es eine einfachere Möglichkeit. Der WPP enthält einen Mechanismus zum Ausschließen von Dateien und Ordnern, indem Elementlisten mit den Namen ExcludeFromPackageFolders und ExcludeFromPackageFiles erstellt werden. Sie können diesen Mechanismus erweitern, indem Sie diesen Listen Ihre eigenen Elemente hinzufügen. Hierzu müssen Sie die folgenden allgemeinen Schritte ausführen:
Erstellen Sie eine benutzerdefinierte Projektdatei mit dem Namen [Projektname].wpp.targets im selben Ordner wie Ihre Projektdatei.
Hinweis
Die wpp.targets-Datei muss sich im selben Ordner wie die Projektdatei Ihrer Webanwendung befinden( z . B. ContactManager.Mvc.csproj) und nicht im selben Ordner wie alle benutzerdefinierten Projektdateien, die Sie zum Steuern des Build- und Bereitstellungsprozesses verwenden.
Fügen Sie in der Datei .wpp.targets ein ItemGroup-Element hinzu.
Fügen Sie im ItemGroup-ElementDie Elemente ExcludeFromPackageFolders und ExcludeFromPackageFiles hinzu, um bestimmte Dateien und Ordner nach Bedarf auszuschließen.
Dies ist die grundlegende Struktur dieser .wpp.targets-Datei :
<Project ToolsVersion="4.0"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<ExcludeFromPackageFolders Include="[semi-colon-separated folder list]">
<FromTarget>[arbitrary metadata value]</FromTarget>
</ExcludeFromPackageFolders>
<ExcludeFromPackageFiles Include="[semi-colon-separated file list]">
<FromTarget>[arbitrary metadata value]</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
</Project>
Beachten Sie, dass jedes Element ein Elementmetadatenelement namens FromTarget enthält. Dies ist ein optionaler Wert, der sich nicht auf den Buildprozess auswirkt. Es dient lediglich dazu, anzugeben, warum bestimmte Dateien oder Ordner weggelassen wurden, wenn jemand die Buildprotokolle überprüft.
Ausschließen von Dateien und Ordnern aus einem Webpaket
Im nächsten Verfahren wird gezeigt, wie Sie einem Webanwendungsprojekt eine WPP.targets-Datei hinzufügen und wie Sie die Datei verwenden, um bestimmte Dateien und Ordner aus dem Webpaket auszuschließen, wenn Sie Ihr Projekt erstellen.
So schließen Sie Dateien und Ordner aus einem Webbereitstellungspaket aus
Öffnen Sie Ihre Projektmappe in Visual Studio 2010.
Klicken Sie im Projektmappen-Explorer Fenster mit der rechten Maustaste auf den Projektknoten Ihrer Webanwendung (z. B. ContactManager.Mvc), zeigen Sie auf Hinzufügen, und klicken Sie dann auf Neues Element.
Wählen Sie im Dialogfeld Neues Element hinzufügen die XML-Dateivorlage aus.
Geben Sie im Feld Nameden Namen [Projektname].wpp.targets ein (z. B. ContactManager.Mvc.wpp.targets), und klicken Sie dann auf Hinzufügen.
Hinweis
Wenn Sie dem Stammknoten eines Projekts ein neues Element hinzufügen, wird die Datei im selben Ordner wie die Projektdatei erstellt. Sie können dies überprüfen, indem Sie den Ordner in Windows Explorer öffnen.
Fügen Sie in der Datei ein Project-Element und ein ItemGroup-Element hinzu:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> </ItemGroup> </Project>
Wenn Sie Ordner aus dem Webpaket ausschließen möchten, fügen Sie dem ItemGroup-Element ein ExcludeFromPackageFolders-Element hinzu:
Geben Sie im Include-Attribut eine durch Semikolon getrennte Liste der Ordner an, die Sie ausschließen möchten.
Geben Sie im FromTarget-Metadatenelement einen aussagekräftigen Wert an, um anzugeben, warum die Ordner ausgeschlossen werden, z. B. den Namen der Datei .wpp.targets .
<ExcludeFromPackageFolders Include="Internal"> <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget> </ExcludeFromPackageFolders>
Wenn Sie Dateien aus dem Webpaket ausschließen möchten, fügen Sie dem ItemGroup-Element ein ExcludeFromPackageFiles-Element hinzu:
Geben Sie im Include-Attribut eine durch Semikolon getrennte Liste der Dateien an, die Sie ausschließen möchten.
Geben Sie im FromTarget-Metadatenelement einen aussagekräftigen Wert an, um anzugeben, warum die Dateien ausgeschlossen werden, z. B. den Namen der WPP.targets-Datei .
<ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4-vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js"> <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget> </ExcludeFromPackageFiles>
Die Datei [Projektname].wpp.targets sollte nun wie folgt aussehen:
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <ItemGroup> <ExcludeFromPackageFolders Include="Internal"> <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget> </ExcludeFromPackageFolders> <ExcludeFromPackageFiles Include="Scripts\jquery-1.4.4- vsdoc.js;Scripts\jquery-1.4.4.js;Scripts\jquery-ui.js;Scripts\jquery.unobtrusive-ajax.js;Scripts\jquery.validate-vsdoc.js;Scripts\jquery.validate.js;Scripts\jquery.validate.unobtrusive.js;Scripts\MicrosoftAjax.debug.js;Scripts\MicrosoftMvcValidation.debug.js"> <FromTarget>ContactManager.Mvc.wpp.targets</FromTarget> </ExcludeFromPackageFiles> </ItemGroup> </Project>
Speichern und schließen Sie die Datei [Projektname].wpp.targets .
Wenn Sie das nächste Mal Ihr Webanwendungsprojekt erstellen und packen, erkennt das WPP automatisch die Datei .wpp.targets . Alle von Ihnen angegebenen Dateien und Ordner sind nicht im Webpaket enthalten.
Zusammenfassung
In diesem Thema wird beschrieben, wie Sie bestimmte Dateien und Ordner ausschließen, wenn Sie ein Webpaket erstellen, indem Sie eine benutzerdefinierte wpp.targets-Datei im selben Ordner wie ihre Webanwendungsprojektdatei erstellen.
Weitere Informationen
Weitere Informationen zur Verwendung benutzerdefinierter Microsoft-Build-Engine-Projektdateien (MSBuild) zum Steuern des Bereitstellungsprozesses finden Sie unter Grundlegendes zur Projektdatei und Grundlegendes zum Buildprozess. Weitere Informationen zum Paket- und Bereitstellungsprozess finden Sie unter Erstellen und Verpacken von Webanwendungsprojekten, Konfigurieren von Parametern für die Webpaketbereitstellung und Bereitstellen von Webpaketen.