Erstellen von ClickOnce-Anwendungen über die Befehlszeile

In Visual Studio können Sie Projekte über die Befehlszeile erstellen, auch wenn sie in der integrierten Entwicklungsumgebung (Integrated Development Environment, IDE) erstellt wurden. Sie können sogar ein mit Visual Studio erstelltes Projekt auf einem anderen Computer neu erstellen, auf dem nur das .NET Framework installiert ist. Auf diese Weise können Sie einen Build mithilfe eines automatisierten Prozesses reproduzieren, z. B. in einem zentralen Buildlab oder unter Verwendung erweiterter Skripttechniken, die über die Erstellung des Projekts selbst hinausgehen.

Hinweis

Informationen zum Erstellen von ClickOnce-Anwendungen über die Befehlszeile finden Sie unter Erstellen von .NET-ClickOnce-Anwendungen über die Befehlszeile.

Verwenden von MSBuild zum Reproduzieren von ClickOnce-Anwendungsbereitstellungen für .NET Framework

Durch Aufrufen von msbuild /target:publish mithilfe der Befehlszeile weist dieser Befehl das MSBuild-System an, das Projekt zu erstellen und eine ClickOnce-Anwendung im Ordner „publish“ zu erstellen. Dieser Befehl entspricht dem Befehl Veröffentlichen in der IDE.

Der Befehl führt die Datei msbuild.exe aus, die sich im Pfad der Visual Studio-Befehlszeilenumgebung befindet.

Das Ziel („target“) signalisiert MSBuild, wie der Befehl zu verarbeiten ist. Die wichtigsten Ziele sind das Ziel für den Build und das Ziel für die Veröffentlichung. Das Buildziel erfüllt den gleichen Zweck wie die Auswahl des Befehls „Erstellen“ (oder die Betätigung von F5) in der IDE. Wenn Sie Ihr Projekt lediglich erstellen möchten, können Sie msbuild eingeben. Dieser Befehl funktioniert, weil das Buildziel das Standardziel für alle von Visual Studio generierten Projekte ist. Daher müssen Sie das Buildziel nicht explizit angeben. Die Eingabe von msbuild ist daher derselbe Vorgang wie die Eingabe von msbuild /target:build.

Mit dem Befehl /target:publish wird MSBuild angewiesen, das Veröffentlichungsziel aufzurufen. Das Veröffentlichungsziel hängt vom Buildziel ab. Das bedeutet, dass der Veröffentlichungsvorgang eine Obermenge des Buildvorgangs ist. Wenn Sie beispielsweise eine Änderung an Visual Basic- oder C#-Quelldateien vorgenommen haben, erstellt der Veröffentlichungsvorgang die entsprechende Assembly automatisch neu.

Informationen zum Generieren einer vollständigen ClickOnce-Bereitstellung mithilfe des Befehlszeilentools „Mage.exe“ zur Erstellung Ihres ClickOnce-Manifests finden Sie unter Exemplarische Vorgehensweise: Manuelles Bereitstellen einer ClickOnce-Anwendung.

Erstellen und Kompilieren einer einfachen ClickOnce-Anwendung mit MSBuild

Am einfachsten lässt sich ein Veröffentlichungsprofil mit Visual Studio erstellen. Für die Veröffentlichung mit MSBuild ist ein Veröffentlichungsprofil erforderlich.

Erstellen und Veröffentlichen eines ClickOnce-Projekts

  1. Öffnen Sie Visual Studio, und erstellen Sie ein neues Projekt.

    Wählen Sie die Projektvorlage Windows Forms-App (.NET Framework) oder WPF-App (.NET Framework) aus, und benennen Sie das Projekt mit CmdLineDemo.

  2. Wählen Sie im Menü Erstellen den Befehl Veröffentlichen aus.

    Dieser Schritt stellt sicher, dass das Projekt für die Bereitstellung einer ClickOnce-Anwendung ordnungsgemäß konfiguriert ist.

    Der Webpublishing-Assistent wird angezeigt.

  3. Wählen Sie im Assistenten zum Veröffentlichen Fertigstellen aus.

    Visual Studio generiert die Standardwebseite namens Publish.htm und zeigt sie an.

  4. Speichern Sie Ihr Projekt, und notieren Sie sich den Ordner, in dem Sie es gespeichert haben.

    Durch die vorherigen Schritte wird ein ClickOnce-Projekt erstellt, das zum ersten Mal veröffentlicht wurde. Jetzt können Sie den Build außerhalb der IDE reproduzieren.

Reproduzieren des Builds mithilfe der Befehlszeile

  1. Beenden Sie Visual Studio.

  2. Wählen Sie im Windows-StartmenüTools>Befehlszeile>Developer-Eingabeaufforderung aus.

    Die Developer-Eingabeaufforderung von Visual Studio wird geöffnet.

  3. Vergewissern Sie sich, dass in der Visual Studio-Eingabeaufforderung im aktuellen Verzeichnis der Speicherort des Projekts angezeigt wird, das Sie zuvor erstellt haben.

    Wenn Sie nicht im Projektverzeichnis arbeiten, geben Sie einen Befehl ein, um zum gewünschten Speicherort zu wechseln, z. B. chdir C:\Users\username\source\repos\CmdLineDemo.

  4. Um die im vorherigen Abschnitt erstellten vorhandenen Dateien zu entfernen, geben Sie rmdir /s publish ein.

    Dieser Schritt ist optional, stellt aber sicher, dass der Befehlszeilenbuild alle neuen Dateien erzeugt.

  5. Geben Sie msbuild /target:publish ein.

    Durch die vorherigen Schritte wird eine vollständige ClickOnce-Anwendungsbereitstellung in einem Unterordner namens Publish in Ihrem Projekt erstellt. CmdLineDemo.application ist das ClickOnce-Bereitstellungsmanifest. Der Ordner CmdLineDemo_1.0.0.0 enthält die Dateien CmdLineDemo.exe und CmdLineDemo.exe.manifest, das Anwendungsmanifest von ClickOnce. Setup.exe ist der Bootstrapper, der standardmäßig zur Installation des .NET Framework konfiguriert ist. Der Ordner „DotNetFX“ enthält die weitervertreibbaren Dateien für das .NET Framework. Die Dateien an diesem Speicherort umfassen alle Dateien, die Sie benötigen, um Ihre Anwendung über das Internet, per UNC oder CD/DVD bereitzustellen.

Hinweis

Das MSBuild-System gibt den Speicherort für die Ausgabe mithilfe der Option PublishDir an, zum Beispiel msbuild /t:publish /p:PublishDir="<specific location>".

Ausgabe des Veröffentlichungsprozesses

MSBuild verwendet die Eigenschaft PublishDir, um den Speicherort der Buildausgabe (einschließlich Buildartefakten) festzulegen. Der PublishDir-Wert, den MSBuild als Ziel für die Veröffentlichung verwendet, wird standardmäßig aus der PublishDir-Eigenschaft in der Projektdatei (.NET-Framework) abgerufen. Sie können dieses Verhalten mithilfe der MSBuild-Befehlszeile außer Kraft setzen, indem Sie den /p-Switch verwenden. Wenn Sie die Einstellung überschreiben, wird die Veröffentlichungsausgabe am angegebenen Speicherort gespeichert. Die Ausgabe wird während des MSBuild-Schritts der Veröffentlichung generiert. Jedes MSBuild-Ziel mit AfterTargets="ClickOncePublish" wird nach der Erstellung dieser Kopie ausgeführt.

Die PublishUrl-Eigenschaft wird im Gegensatz zu PublishDir nicht im MSBuild-Schritt verwendet. PublishUrl wird ignoriert, wenn Sie MSBuild direkt für die Veröffentlichung über die Befehlszeile aufrufen.

Wenn die Veröffentlichung in der Visual Studio-IDE gestartet wird, ruft Visual Studio MSBuild auf, um Artefakte am Speicherort PublishDir zu veröffentlichen. Nach Abschluss dieses MSBuild-Schritts veröffentlicht Visual Studio ClickOnce-spezifische Dateien an dem Speicherort, auf den von PublishUrl verwiesen wird. Dieser zweite Schritt wird innerhalb des Visual Studio-Prozesses ausgeführt. Sie können keine Ziele/Aufgaben einfügen, die während dieses Schritts ausgeführt werden sollen, da es sich um einen Visual Studio-Prozess handelt.

Kopieren Sie bei MSBuild-Bereitstellungen, die nicht Visual Studio verwenden, alle Dateien im Bereitstellungsverzeichnis auf das Bereitstellungsziel oder -medium. Das Bereitstellungsverzeichnis kann entweder ein Ordner auf einer Website, einer FTP-Site, in einer Dateifreigabe oder auf einer CD-ROM sein. Sie können beispielsweise ein Drittanbietertool oder einen benutzerdefinierten MSBuild-Task verwenden, um die ClickOnce-Dateien zu kopieren.

Für jede Nachverarbeitung im Ordner PublishUrl benötigen Sie ein separates Skript.

Wichtig

Wenn PublishDir auf denselben Speicherort wie PublishUrl festgelegt ist, wird eine doppelte Kompilierungsausgabe in den Speicherort PublishUrl kopiert. Sie können dieses Problem in Visual Studio 2022, Version 17.4 und höher vermeiden, indem Sie ein neues Profil erstellen. Das neue Profil legt PublishDir auf einen anderen Speicherort als PublishUrlfest. Am Ende des Veröffentlichungsvorgangs werden die relevanten ClickOnce-Dateien von PublishDir in den Speicherort PublishUrl kopiert.

Eigenschaften veröffentlichen

Wenn Sie die Anwendung mithilfe der zuvor beschriebenen Verfahren veröffentlichen, fügt der Veröffentlichungs-Assistent die folgenden Eigenschaften in Ihre Projektdatei ein. Diese Eigenschaften haben direkten Einfluss darauf, wie die ClickOnce-Anwendung erstellt wird.

Unter CmdLineDemo.vbproj / CmdLineDemo.csproj ist Folgendes möglich:

<AssemblyOriginatorKeyFile>WindowsApplication3.snk</AssemblyOriginatorKeyFile>
<GenerateManifests>true</GenerateManifests>
<TargetZone>LocalIntranet</TargetZone>
<PublisherName>Microsoft</PublisherName>
<ProductName>CmdLineDemo</ProductName>
<PublishUrl>http://localhost/CmdLineDemo</PublishUrl>
<Install>true</Install>
<ApplicationVersion>1.0.0.*</ApplicationVersion>
<ApplicationRevision>1</ApplicationRevision>
<UpdateEnabled>true</UpdateEnabled>
<UpdateRequired>false</UpdateRequired>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdateUrlEnabled>false</UpdateUrlEnabled>
<IsWebBootstrapper>true</IsWebBootstrapper>
<BootstrapperEnabled>true</BootstrapperEnabled>

Bei .NET Framework-Projekten können Sie diese Eigenschaften in der Befehlszeile außer Kraft setzen, ohne die Projektdatei selbst zu ändern. Der Code im folgenden Beispiel erstellt die ClickOnce-Anwendungsbereitstellung ohne den Bootstrapper:

msbuild /target:publish /property:BootstrapperEnabled=false

In Visual Studio werden die Eigenschaften für die Veröffentlichung über die Eigenschaftsseiten Veröffentlichen, Sicherheit und Signieren im Projekt-Designer gesteuert.

Die folgenden Veröffentlichungseigenschaften werden auf verschiedenen Eigenschaftenseiten des Anwendungs-Designers festgelegt.

  • AssemblyOriginatorKeyFile legt die Schlüsseldatei fest, die zum Signieren der Manifeste Ihrer ClickOnce-Anwendungen verwendet wird. Mit diesem Schlüssel können Sie Ihren Assemblys auch einen starken Namen zuweisen. Diese Eigenschaft wird auf der Seite Signieren im Projekt-Designer festgelegt.

Die folgenden Eigenschaften werden auf der Seite Sicherheit festgelegt:

  • ClickOnce-Sicherheitseinstellungen aktivieren legt fest, ob ClickOnce-Manifeste erzeugt werden. Wenn ein Projekt zum ersten Mal erstellt wird, ist die ClickOnce-Manifestgenerierung standardmäßig deaktiviert. Der Assistent aktiviert dieses Flag bei der ersten Veröffentlichung automatisch.

  • TargetZone legt die Vertrauensstufe fest, die im Manifest Ihrer ClickOnce-Anwendung ausgegeben werden soll. Mögliche Werte sind „Internet“, „LocalIntranet“ und „Custom“. „Internet“ und „LocalIntranet“ bewirken, dass ein Standardberechtigungssatz im Manifest Ihrer ClickOnce-Anwendung ausgegeben wird. „LocalIntranet“ ist die Standardeinstellung und steht praktisch für uneingeschränktes Vertrauen. „Custom“ legt fest, dass nur die Berechtigungen im ClickOnce-Anwendungsmanifest ausgegeben werden sollen, die explizit in der Basisdatei app.manifest angegeben sind. Die Datei app.manifest ist eine partielle Manifestdatei, die nur Definitionen der Vertrauensinformationen enthält. Es handelt sich um eine ausgeblendete Datei, die Ihrem Projekt automatisch hinzugefügt wird, wenn Sie auf der Seite Sicherheit Berechtigungen konfigurieren.

Die folgenden Eigenschaften werden auf der Seite Veröffentlichen festgelegt:

  • PublishUrl ist der Speicherort, an dem die Anwendung in der IDE veröffentlicht werden soll. Er wird in das ClickOnce-Anwendungsmanifest eingefügt, wenn die Eigenschaften InstallUrl und UpdateUrl nicht angegeben sind.

  • ApplicationVersion gibt die Version der ClickOnce-Anwendung an. Die Version ist eine vierstellige Zahl. Wenn die letzte Ziffer ein „*“ (Sternchen) ist, wird die ApplicationRevision durch den Wert ersetzt, der beim Erstellen in das Manifest eingefügt wurde.

  • ApplicationRevision gibt die Revision an. Dieser Wert ist eine ganze Zahl, die bei jeder Veröffentlichung in der IDE erhöht wird. Hinweis: Bei Builds, die über die Befehlszeile ausgeführt werden, wird der Wert nicht automatisch erhöht.

  • Install gibt an, ob es sich um eine installierte Anwendung oder eine aus dem Web ausgeführte Anwendung handelt.

  • InstallUrl (nicht angezeigt) ist der Speicherort, über den die Benutzer die Anwendung installieren. Sofern angegeben, wird dieser Wert in den Bootstrapper setup.exe aufgenommen, wenn die Eigenschaft IsWebBootstrapper aktiviert ist. Außerdem wird er in das Anwendungsmanifest eingefügt, wenn UpdateUrl nicht angegeben ist.

  • SupportUrl (nicht angezeigt) ist der Speicherort, der im Dialogfeld Programme hinzufügen/entfernen für eine installierte Anwendung verlinkt ist.

Die folgenden Eigenschaften werden im Dialogfeld Anwendungsupdates festgelegt, das Sie über die Seite Veröffentlichen aufrufen.

  • UpdateEnabled gibt an, ob die Anwendung nach Updates suchen soll.

  • UpdateMode legt Aktualisierungen entweder im Vordergrund oder im Hintergrund fest.

  • UpdateInterval gibt an, wie häufig die Anwendung nach Updates suchen soll.

  • UpdateIntervalUnits gibt an, ob der UpdateInterval-Wert in Einheiten von Stunden, Tagen oder Wochen angegeben wird.

  • UpdateUrl (nicht angezeigt) ist der Ort, von dem die Anwendung Updates erhält. Sofern angegeben, wird dieser Wert in das Anwendungsmanifest eingefügt.

Die folgenden Eigenschaften werden im Dialogfeld Veröffentlichungsoptionen festgelegt, auf das Sie über die Seite Veröffentlichen zugreifen.

  • PublisherName gibt den Namen des Herausgebers an, der beim Installieren oder Ausführen der Anwendung in der Eingabeaufforderung angezeigt wird. Für eine installierte Anwendung wird die Eigenschaft auch zur Angabe des Ordnernamens im Menü Start verwendet.

  • ProductName gibt den Namen des Produkts an, der beim Installieren oder Ausführen der Anwendung in der Eingabeaufforderung angezeigt wird. Für eine installierte Anwendung wird die Eigenschaft auch zur Angabe des Namens der Tastenkombination im Menü Start verwendet.

Die folgenden Eigenschaften werden im Dialogfeld Voraussetzungen festgelegt, auf das Sie über die Seite Veröffentlichen zugreifen.

  • BootstrapperEnabled legt fest, ob der Bootstrapper setup.exe generiert werden soll.

  • IsWebBootstrapper legt fest, ob der Bootstrapper setup.exe über das Web oder im datenträgerbasierten Modus arbeitet.

Verwenden von Optionen: InstallURL, SupportUrl, PublishURL, and UpdateURL

Die folgende Tabelle zeigt die vier URL-Optionen für die ClickOnce-Bereitstellung.

URL-Option Beschreibung
PublishURL Erforderlich, um die ClickOnce-Anwendung auf einer Website zu veröffentlichen.
InstallURL Optional. Legen Sie diese URL-Option fest, wenn sich die Installationswebsite von der PublishURL unterscheidet. Sie könnten beispielsweise die PublishURL auf einen FTP-Pfad und die InstallURL auf eine Web-URL festlegen.
SupportURL Optional. Legen Sie diese URL-Option fest, wenn eine andere Supportwebsite als PublishURL verwendet werden soll. Sie könnten beispielsweise die SupportURL auf die Website des Kundensupports Ihres Unternehmens festlegen.
UpdateURL Optional. Legen Sie diese URL-Option fest, wenn der Speicherort für Updates sich von InstallURL unterscheidet. Sie könnten beispielsweise die PublishURL auf einen FTP-Pfad und die UpdateURL auf eine Web-URL festlegen.