Ich versuche derzeit, die Visual Studio 2010-Funktionen "Veröffentlichen" und "MSDeploy" zu verwenden, um meine Anforderungen an die Webbereitstellung zu erfüllen, bin jedoch auf eine Straßensperre hinsichtlich der Anpassung des Pakets abhängig von meiner Build-Konfiguration gestoßen.
Ich entwickle in einer 32-Bit-Umgebung, muss jedoch ein Release-Paket für eine 64-Bit-Umgebung erstellen. Daher habe ich in der 'Release'-Konfiguration ein Post-Build-Ereignis, das die 64-Bit-Version einer DLL eines Drittanbieters in das bin-Verzeichnis kopiert und die 32-Bit-Version überschreibt . Wenn ich die Funktion "Veröffentlichen" verwende, wird die richtige 64-Bit-DLL, obwohl sie in das bin-Verzeichnis kopiert wird, nicht in das Paket aufgenommen.
Gibt es eine Möglichkeit, das 'Veröffentlichen' dazu zu bringen, Dateien einzuschließen, die während eines Post-Build-Ereignisses in das bin-Verzeichnis kopiert wurden?
Antworten:
Ich beantwortete eine ähnliche, aber andere Frage unter Wie fügen Sie zusätzliche Dateien mithilfe von VS2010-Webbereitstellungspaketen hinzu? .
In Ihrem Szenario, in dem Sie ein Post-Build-Ereignis verwenden, würde ich empfehlen, das Post-Build-Ereignis zu löschen und Ihre Aktionen mithilfe Ihrer eigenen MSBuild-Ziele anstelle eines Post-Build-Ereignisses zu implementieren. Unten finden Sie den Text der anderen Antwort.
Von: Wie fügen Sie zusätzliche Dateien mithilfe von VS2010-Webbereitstellungspaketen ein?
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 dies nicht lesen. 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).
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.
Hier habe ich das Element _CustomFiles erstellt und im Include-Attribut angewiesen, alle Dateien in diesem Ordner und alle darunter liegenden Ordner abzurufen. 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, über den es in das Paket eingefügt 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.
Ü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.js 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.
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.
quelle
Ich habe eine Problemumgehung für das Problem gefunden, indem ich das
ExcludeFilesFromDeployment
Element in der Projektdatei verwendet habe. Ich hatte die Idee von Web Deployment: Ausschließen von Dateien und OrdnernWenn Sie also Projektdateien so verpacken müssen, wie sie nach einem erfolgreichen Build und den zugehörigen Schritten nach dem Build in Ihrem Projektverzeichnis vorhanden sind, gehen Sie wie folgt vor.
wählen Sie die zu implementierenden Elemente als "Alle Dateien in diesem Projektordner" aus.
PropertyGroup
Element, das der Konfigurationseinstellung zugeordnet ist, z. B. "Release".PropertyGroup
Fügen Sie innerhalb des Elements die folgenden Elemente hinzu und schließen Sie Dateien und Ordner aus, die nicht im Paket enthalten sein sollenSpeichern und laden Sie Ihr Projekt neu
Dies löst mein Problem vorerst, aber wenn es eine bessere Lösung gibt, lassen Sie es mich bitte wissen, da dies aufgrund der damit verbundenen Hackerei nicht ideal ist, aber vielleicht ist dies auch ein ungewöhnliches Bereitstellungsszenario?
quelle
Wählen Sie Ihre Dateien oder Ordner aus und ändern Sie die Build-Aktion als Inhalt im Eigenschaftenfenster.
quelle
Ich weiß, dass es eine alte Frage ist, aber keine davon hat bei mir funktioniert.
In 2017 VS habe ich einfach mit der rechten Maustaste auf den zu veröffentlichenden zusätzlichen Ordner geklickt und "Veröffentlichen" ausgewählt.
Beispiel:
quelle
Durch Hinzufügen des Ordners bin (und seines Inhalts) zum Projekt wurden die Dateien in das Veröffentlichungsausgabeverzeichnis kopiert.
Für mich bestand mein Problem darin, dass ich eine proprietäre Softwarelizenzdatei im Ordner bin / ablegen musste, diese aber nicht bei jeder Bereitstellung manuell kopieren wollte.
Hierbei wurde Visual Studio 2015 Professional verwendet
quelle
Ich weiß, dass dies ein altes Gespräch ist, aber ich bin darauf gestoßen, als ich versucht habe, dasselbe zu tun, und ich dachte, es wäre hilfreich, das hinzuzufügen, was ich hier gefunden habe.
Fast alle Artikel über das Einfügen zusätzlicher Dateien in Ihre Publikation verwenden diese Methode zum Hinzufügen der
CopyAllFilesToSingleFolderForPackageDependsOn
oder derCopyAllFilesToSingleFolderForMSDeployDependsOn
Elemente in diePropertyGroup
und sie alle sind gleich wie "Ich habe dies am Ende der Datei hinzugefügt ...".Dies tat ich und verbrachte einen Nachmittag damit, herauszufinden, warum nichts passierte, bis mir klar wurde, dass sich
PropertyGroup
oben in der Datei bereits ein Abschnitt befand. Als ich meineCopyAllFilesToSingleFolderForPackageDependsOn
in diesen Abschnitt steckte , funktionierte es gut.Hoffe, das spart jemandem eines Tages Zeit
quelle