asp.net titel Wie erhält man die Publizierungsfunktion von Visual Studio, um Dateien aus Post-Build-Ereignissen einzubinden?




wordpress seo titel (4)

Ich habe eine Problemumgehung gefunden, indem ich das ExcludeFilesFromDeployment Element in der Projektdatei verwendet habe. Ich habe die Idee von Web Deployment: Dateien und Ordner ausschließen

Wenn Sie nach einem erfolgreichen Build und den damit verbundenen Postbuild-Schritten Projektdateien so packen müssen, wie sie in Ihrem Projektverzeichnis vorhanden sind, gehen Sie folgendermaßen vor.

  1. Bearbeiten Sie "Paket / Web veröffentlichen" Projekteinstellungen und
    Wählen Sie Zu bereitende Elemente aus, um "Alle Dateien in diesem Projektordner" zu sein.
  2. Entladen Sie das Projekt
  3. Klicken Sie mit der rechten Maustaste auf das entladene Projekt und wählen Sie, um die Projektkonfiguration zu bearbeiten
  4. Suchen Sie das Element PropertyGroup , das der Konfigurationseinstellung zugeordnet ist, z. B. "Release"
  5. Fügen Sie im PropertyGroup Element die folgenden Elemente hinzu und schließen Sie Dateien und Ordner aus, die nicht im Paket enthalten sein sollen

    <ExcludeFilesFromDeployment>*.cs;**\.svn\**\*.*;Web.*.config;*.csproj*</ExcludeFilesFromDeployment>
    <ExcludeFoldersFromDeployment>.svn;Controllers;BootstrapperTasks;Properties</ExcludeFoldersFromDeployment>
    
  6. Speichern und laden Sie Ihr Projekt neu

Dies löst mein Problem vorläufig, aber wenn es eine bessere Lösung gibt, dann lassen Sie es mich bitte wissen, da dies nicht ideal ist aufgrund des Hacks, aber auch dies ist vielleicht ein ungewöhnliches Einsatzszenario?

Ich versuche derzeit, die Veröffentlichungs- und MSDeploy-Funktionen von Visual Studio 2010 zu verwenden, um meine Web-Deployment-Anforderungen zu erfüllen, bin aber in Bezug auf die Anpassung des Pakets in Abhängigkeit von meiner Build-Konfiguration in einen Roadblock geraten.

Ich entwickle in einer 32bit-Umgebung, muss aber ein Release-Paket für eine 64bit-Umgebung erstellen, also habe ich in der 'Release' -Konfiguration ein Postbuildereignis, das die 64bit-Version einer Drittanbieter-DLL in das bin-Verzeichnis kopiert und die 32bit-Version überschreibt . Wenn ich die Funktion "Veröffentlichen" verwende, obwohl die richtige 64-Bit-DLL in das Verzeichnis bin kopiert wird, wird sie 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?


Wählen Sie Ihre Dateien oder Ordner aus und ändern Sie die Build-Aktion als Inhalt im Eigenschaftenfenster.


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 mit Ihren eigenen MSBuild-Zielen anstelle des Post-Build-Ereignisses zu implementieren. Im Folgenden finden Sie den Text der anderen Antwort.

Von: Wie binden Sie zusätzliche Dateien mithilfe von VS2010-Webbereitstellungspaketen ein?

Große Frage. Ich habe gerade einen sehr detaillierten Blogeintrag dazu im Web Deployment Tool (MSDeploy) veröffentlicht: Build Package mit zusätzlichen Dateien oder Ausschluss bestimmter Dateien .

Hier ist die Zusammenfassung. Nach dem Einschließen von Dateien zeige ich, wie man auch Dateien ausschließt.

Einschließlich zusätzlicher Dateien

Das Hinzufügen zusätzlicher Dateien in das Paket ist ein bisschen schwieriger, aber immer noch kein Großbuchstabe, wenn Sie mit MSBuild vertraut sind, und wenn Sie dies nicht tun, dann lesen Sie dies. Um dies zu tun, müssen wir uns in den Teil des Prozesses einklinken, der die Dateien für die Verpackung sammelt. Das Ziel, das wir erweitern müssen, heißt CopyAllFilesToSingleFolder. Dieses Ziel verfügt über die Abhängigkeitseigenschaft PipelinePreDeployCopyAllFilesToOneFolderDependsOn, auf die wir zugreifen und unser eigenes Ziel injizieren können. Wir werden also ein Ziel mit dem Namen CustomCollectFiles erstellen und dieses in den Prozess einfügen. Das erreichen wir mit folgendem (erinnern Sie sich nach dem Import-Statement).

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    CustomCollectFiles;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
</PropertyGroup>

Dies wird unser Ziel dem Prozess hinzufügen, jetzt müssen wir das Ziel selbst definieren. Angenommen, Sie haben einen Ordner mit dem Namen "Extra Files", der 1 Stufe über Ihrem Webprojekt liegt. Sie möchten alle diese Dateien einschließen. Hier ist das CustomCollectFiles-Ziel und wir diskutieren danach.

<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 Item _CustomFiles erstellt und im Include-Attribut aufgefordert, alle Dateien in diesem Ordner und darunter liegenden Ordner abzuholen. Dann verwende ich dieses Element, um das FilesForPackagingFromProject-Element aufzufüllen. Dies ist das Element, das MSDeploy tatsächlich verwendet, um zusätzliche Dateien hinzuzufügen. Beachten Sie auch, dass ich den DestinationRelativePath-Metadaten-Wert deklariert habe. Dies bestimmt den relativen Pfad, in dem es im Paket platziert wird. Ich habe hier die Anweisung Extra Files% (RecursiveDir)% (Dateiname)% (Extension) verwendet. Das bedeutet, dass Sie es an demselben relativen Speicherort im Paket platzieren müssen wie im Ordner "Extra-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 innerhalb von VS öffnen. Klicken Sie mit der rechten Maustaste auf die Projektauswahl 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 nach! Wenn Sie also Dateien ausschließen müssen, gibt es einen Objektnamen, ExcludeFromPackageFiles, der dazu verwendet werden kann. Angenommen, Sie haben eine Datei mit dem Namen Sample.Debug.js, die in Ihrer Webanwendung enthalten ist, aber Sie möchten, dass diese Datei von den erstellten Paketen ausgeschlossen wird. Sie können das Snippet nach dieser Importanweisung einfügen.

<ItemGroup>
  <ExcludeFromPackageFiles Include="Sample.Debug.xml">
    <FromTarget>Project</FromTarget>
  </ExcludeFromPackageFiles>
</ItemGroup>

Wenn Sie dieses Element auffüllen, werden die Dateien automatisch ausgeschlossen. Beachten Sie die Verwendung der FromTarget-Metadaten hier. Ich werde hier nicht darauf eingehen, aber Sie sollten wissen, dass Sie das immer angeben müssen.


Durch Hinzufügen des Ordners "bin" (und seines Inhalts) zum Projekt wurden die Dateien in das Veröffentlichungsausgabeverzeichnis kopiert.

Für mich war mein Problem, dass ich eine proprietäre Softwarelizenzdatei in den bin / Ordner legen musste, aber nicht jede Implementierung manuell kopieren wollte.

Dies war mit Visual Studio 2015 Professional





msdeploy