Kann ich einen Ordner oder Dateien ausschließen, wenn ich eine Website in Visual Studio 2005 veröffentliche? Ich habe verschiedene Ressourcen, die ich im Projektmappen-Explorer bereithalten möchte, z. B. alternative Konfigurationsdateien für verschiedene Umgebungen, aber ich möchte sie nicht wirklich auf dem Server veröffentlichen. Gibt es eine Möglichkeit, sie auszuschließen? Wenn Sie andere Projekttypen verwenden, z. B. eine DLL-Assembly, kann ich die Build Action-Eigenschaft einer Datei auf "None" und die Copy to Output Directory-Eigenschaft auf "Do not copy" setzen. Ich kann keine ähnlichen Einstellungen für Dateien auf einer Website finden.
Wenn die IDE diese Funktion nicht bietet, hat jemand eine gute Technik für den Umgang mit solchen Dateien?
quelle
Antworten:
Wenn Sie die Dateien anhand der Erweiterung identifizieren können, können Sie dies mit dem Tag buildproviders in der Datei web.config konfigurieren . Fügen Sie die Erweiterung hinzu und ordnen Sie sie dem ForceCopyBuildProvider zu. Um beispielsweise XML-Dateien so zu konfigurieren, dass sie mit einer Veröffentlichungsaktion kopiert werden, gehen Sie wie folgt vor:
Um zu verhindern, dass eine bestimmte Datei kopiert wird, tun Sie dasselbe, verwenden jedoch System.Web.Compilation.IgnoreFileBuildProvider als Typ.
quelle
Ausschließen von Dateien und Ordnern durch Hinzufügen
ExcludeFilesFromDeployment
undExcludeFoldersFromDeployment
Elemente in Ihre Projektdatei (CSPROJ, .vbproj, etc). Sie müssen die Datei in einem Texteditor oder in Visual Studio bearbeiten, indem Sie das Projekt entladen und anschließend bearbeiten.Fügen Sie die Tags an einer beliebigen Stelle im entsprechenden Bereich
PropertyGroup
(Debug, Release usw.) hinzu, wie unten gezeigt:Platzhalter werden unterstützt.
Um das obige Beispiel zu erklären:
ExcludeFilesFromDeployment
schließtFile1.aspx
(im Stammverzeichnis des Projekts) undFolder2\File2.aspx
(Folder2
im Stammverzeichnis des Projekts) ausExcludeFilesFromDeployment
Option schließt alle Dateien in einem beliebigen Ordner aus.svn
und einem seiner Unterordner ausExcludeFoldersFromDeployment
Ordner mit dem NamenFolder1
(im Stammverzeichnis des Projekts) undFolder2\Folder2a
(Folder2
im Stammverzeichnis des Projekts)Weitere Informationen finden Sie im MSDN-Blogbeitrag Webbereitstellung: Ausschließen von Dateien und Ordnern über die Projektdatei der Webanwendung
quelle
Erstaunlicherweise ist die Antwort für Visual Studio 2012 nicht hier:
Die Antwort mit grünem Häkchen ist nicht die Antwort.
Die höchste "erhöhte" Antwort verweist auf einen Artikel aus dem Jahr 2010 und besagt, dass Sie Ihre csproj-Projektdatei bearbeiten müssen, die jetzt falsch ist. Ich habe das ExcludeFoldersFromDeployment-XML-Element zu meiner Visual Studio 2012-csproj-Datei hinzugefügt und es hat nichts getan. Das Element wurde als ungültig angesehen. Dies liegt daran, dass ExcludeFoldersFromDeployment in die .pubxml-Datei verschoben wurde, wie es aussieht.
Für Webanwendungen und Websites bearbeiten Sie die .pubxml-Datei!
Sie können meiner Antwort folgen oder diese Anleitung ausprobieren, die ich später gefunden habe: http://www.leniel.net/2014/05/using-msdeploy-publish-profile-pubxml-to-create-an-empty-folder-structure- on-iis-and-skip-delete-it-with-msdeployskiprules.html # sthash.MSsQD8U1.dpbs
Ja, Sie können dies nicht nur für Website-Projekte, sondern auch für Websites tun. Ich habe lange Zeit im Internet nach dieser schwer fassbaren Ausschlussmöglichkeit mit einer Visual Studio-Website (NICHT Website-Projekt) gesucht und war zuvor zu dem Schluss gekommen, dass dies nicht möglich ist, aber es sieht so aus:
Fügen Sie in Ihrer .pubxml-Datei [mypublishwebsitename], die sich in ~ / Properties / PublishProfiles für Webanwendungsprojekte und ~ / App_Data / PublishProfiles für Websites befindet, einfach Folgendes hinzu:
als Kinder zum
<PropertyGroup>
Hauptelement in Ihrer .pubxml-Datei. Sie müssen kein neues Element hinzufügen, es sei denn, Sie geben einen bestimmten Build-Typ wie Release oder Debug ein.ABER WARTE!!!
Wenn Sie Dateien von Ihrem Ziel- / Zielserver mit der folgenden Einstellung in Ihrer Veröffentlichungskonfiguration entfernen:
Dann löscht der Webveröffentlichungsprozess auf Ihrem Quell- / Zielserver alles Ausgeschlossene, wie z. B. ein Element, das Sie in Ihrem
<ExcludeFoldersFromDeployment>
und<ExcludeFilesFromDeployment>
!MsDeploy Skip Rules zur Rettung:
Erstens verwendet Web Publish etwas anderes als MSBuild zum Veröffentlichen (Task IO oder ähnliches genannt), hat jedoch einen Fehler und erkennt keine Überspringregeln. Daher müssen Sie Ihrer .pubxml Folgendes hinzufügen:
Ich würde halten
<WebPublishMethod>
in seinem eigenen<PropertyGroup>
, würden Sie denken, Sie nur eine haben könnten<PropertyGroup>
in Ihrer .pubxml Element aber meine überspringen Regeln wurden nicht genannt zu werden , bis ich zog<WebPublishMethod>
zu seinem eigenen<PropertyGroup>
Elemente. Ja, verrückt, aber die Tatsache, dass Sie all dies tun müssen, damit Web Publish einen Ordner / eine Datei auf Ihrem Server ausschließt und auch nicht löscht, ist verrückt.Jetzt meine aktuellen SkipRules-, ExcludeFolders- und ExcludeFiles-Deklarationen in meiner .pubxml:
Und jetzt die Überspringregeln (
<Target>
ist ein Kind von<Project>
in Ihrer .pubxml): ( Sie können<SkipAction>
Skip möglicherweise für alle Aktionen leer lassen, aber ich habe das nicht getestet und bin mir nicht sicher.Und bitte vergessen Sie nicht, die
.
Regel in einem filePath Skip mit einem Backslash zu umgehen.quelle
Ich hatte mit dem gleichen Problem zu kämpfen und drückte schließlich den Auslöser für die Konvertierung der Website in eine Webanwendung. Sobald ich dies getan habe, habe ich alle IDE-Vorteile wie Build-Aktionen erhalten und es wurde schneller zum Booten kompiliert (keine validierende Website mehr ...).
Schritt 1: Konvertieren Sie Ihre "Website" in eine "Webanwendung". Um es zu konvertieren, habe ich gerade eine neue "Webanwendung" erstellt, alle automatisch erstellten Dateien weggeblasen und meine Website kopiert und eingefügt. Dies hat gut funktioniert. Beachten Sie, dass für Berichtsdateien die Build-Aktion auf "Inhalt" anstatt auf "Keine" gesetzt sein muss.
Schritt 2: Jetzt können Sie die Eigenschaft "Build Action" für alle Dateien festlegen.
Hoffe das hilft.
quelle
In Visual Studio 2013 fand ich, dass die Antwort von Keith, das
ExcludeFoldersFromDeployment
Element zur Projektdatei hinzuzufügen , nicht funktionierte (ich hatte die Antwort von Brian Ogden, die dies sagt, nicht gelesen). Ich stellte jedoch fest, dass ich eine Textdatei beim Veröffentlichen in Visual Studio 2013 ausschließen konnte, indem ich nur die folgenden Eigenschaften für die Textdatei selbst festlegte:1) Build-Aktion: Keine
2) In Ausgabeverzeichnis kopieren: Nicht kopieren
Anfangs habe ich versucht, die Eigenschaft "In Ausgabeverzeichnis kopieren" selbst festzulegen, aber das hat nicht funktioniert, als die Build-Aktion auf den Standardwert "Inhalt" gesetzt wurde. Als ich dann die Build-Aktion auf Keine setzte, wurde die Textdatei beim Veröffentlichen nicht mehr in den Zielordner kopiert.
Um diese Eigenschaften in der Visual Studio-Benutzeroberfläche anzuzeigen, klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf die Datei, die Sie ausschließen möchten, und wählen Sie Eigenschaften aus dem Kontextmenü aus.
quelle
Ich denke, Sie haben hier nur zwei Möglichkeiten:
Ich habe das schon einmal durchgemacht und konnte mir nichts wirklich Elegantes einfallen lassen.
quelle
Für Visual Studio 2017 WebApp Publish , zunächst ein Standard-Veröffentlichungssystemprofil für Dateisysteme. Wechseln Sie in den Ordner App_Data \ PublishProfiles \ und bearbeiten Sie die .pubxml-Datei [Profilname].
Hinzufügen
unter dem Tag
<PropertyGroup>
Sie können dieses Tag nur einmal angeben, andernfalls werden nur die Werte des letzten verwendet.Beispiel:
Stellen Sie sicher, dass das Tag DeleteExistingFiles auf False gesetzt ist
quelle
Die gesuchte Funktion ist vorhanden, wenn Ihr Projekt als "Webanwendung" erstellt wurde. Web - Site „Projekte“ sind nur eine Sammlung von Dateien , die als 1 gedacht sind: 1 mit dem, was zu einem Web - Server bereitgestellt wird.
In Bezug auf die Funktionalität sind beide gleich, jedoch kompiliert eine Webanwendung den gesamten Quellcode in eine DLL, anstatt die nackten Quellcodedateien auf den Webserver zu kopieren und nach Bedarf zu kompilieren.
quelle
In Visual Studio 2017 (in meinem Fall 15.9.3) funktioniert die Manipulation der .csproj-Datei in der Tat einwandfrei! Die pubxml muss nicht geändert werden.
Sie können dann unter Verwendung der PropertyGroup-Bedingung ziemlich schöne Einstellungen in der .csproj-Datei erstellen, z.
schließt den Ordner "Samples" von allen Bereitstellungen mit Konfigurationen aus, die mit "Pub _" beginnen ...
quelle
Als zeitgemäße Antwort in Visual Studio 2017 mit einer .net-Core-Site:
Sie können die Veröffentlichung wie folgt im csproj ausschließen, wo sich CopyToPublishDirectory niemals befindet.
Dies wird hier ausführlicher erläutert: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/visual-studio-publish-profiles?view=aspnetcore-2.2
Die früheren Vorschläge haben bei mir nicht funktioniert, ich vermute, weil Visual Studio jetzt einen anderen Veröffentlichungsmechanismus darunter verwendet, vermutlich über das CLI-Tool "dotnet Publish" oder ein gleichwertiges darunter.
quelle
Dies ist nur ein Nachtrag zu den anderen hilfreichen Antworten hier und etwas, das ich nützlich fand ...
Verwenden von wpp.targets zum Ausschließen von Dateien und Ordnern
Wenn Sie mehrere Bereitstellungen für verschiedene Umgebungen haben, ist es hilfreich, nur eine gemeinsame Datei zu haben, in der Sie alle ausgeschlossenen Dateien und Ordner festlegen können. Sie können dies tun, indem Sie eine
*.wpp.targets
Datei im Stammverzeichnis des Projekts erstellen, wie im folgenden Beispiel dargestellt.Weitere Informationen finden Sie in diesem Microsoft-Handbuch:
Gewusst wie: Bearbeiten der Bereitstellungseinstellungen in Veröffentlichungsprofildateien (.pubxml) und der Datei .wpp.targets in Visual Studio-Webprojekten
quelle