2009-10-15 10 views
5

Ich arbeite an einer großen Click-Once-Anwendung (150 MB,> 200 DLLs) und als Teil des interativen Debugging-Prozesses möchte ich nur 1 DLL aktualisieren und die Anwendung neu starten, ohne die gesamte Anwendung neu erstellen und bereitstellen zu müssen.Wie wird nur eine DLL in einer ClickOnce-Installation aktualisiert?

Ist das möglich? Wenn das so ist, wie?

Frage Klarstellung: 9/26/2009

Ich weiß, dass es möglich ist, DLLs auf dem Client manuell patchen, nachdem er die gesamte Anwendung heruntergeladen hat und dann den Client startet .EXE direkt aus dem lokalen Cache Mappe. Das ist nicht der Punkt. Ich möchte wissen, wie man eine DLL auf dem Server ändern/hinzufügen und alle Clients die neue DLL beim nächsten Start erhalten. Ich suche nach einer "Kopie der DLL in diesen Ordner und bearbeite diese Textdatei" Art der Antwort, wenn möglich. Ich mache speziell NICHT wollen die Click-Once-Installation auf dem Server neu erstellen oder neu implementieren ... nur von Hand mit einer einzigen DLL, die ich in der IDE kompiliert Patch.

+1

Das Erstellen und Debuggen einer Anwendung in Visual Studio löst normalerweise nicht den ClickOnce-Veröffentlichungs-/Bereitstellungsprozess aus. Können Sie erläutern, wie Sie Ihre Anwendung debuggen? –

+0

Ich denke, er debuggt es in der Live-Umgebung auf dem Client-System, manchmal die einzige Option. –

+1

Wenn Sie nur versuchen, auf dem Computer eines einzelnen Benutzers zu debuggen, können Sie Ihre Debug-Version einfach in einen Ordner auf dem Desktop des Benutzers kopieren und ClickOnce vollständig überspringen? – codeConcussion

Antwort

6

Ich habe damit für ein paar Tage gekämpft, es kann getan werden, aber es ist fummelig, Mit dieser Lösung scannt ClickOnce immer noch alle Dateien und zeigt den Fortschrittsbalken, aber nur Downloads und aktualisiert die Änderungen.

Hier ist der Prozess habe ich geschrieben dieses Patching-Verfahren auszubringen ...

Hinweis: dieser Prozess müssen mit einer exakten Kopie des Click weitergeführt werden, sobald Einsatz aufgerüstet werden.

Im Ordner Anwendungsdateien ...

  1. offen exe.manifest mit mageui (Version 3.5 oder höher vorausgesetzt VS2010)
  2. Ändern Sie die Versionsnummer

  3. die gepatchte Datei ersetzen (s) Hinweis: Dateien werden mit dem Dateinamen .deploy Eg umbenannt Control.DLL wird control.DLL.Bereitstellen

  4. Sign & Speichern Sie die Datei mit Ihnen

Im Root Path

  1. öffnen .application Datei mit mageui Datei pFX (Version 3.5 oder höher)
  2. Ändern Sie die Versionsnummer
  3. Ändern Sie die erforderliche Mindestversionsnummer
  4. Wählen Sie den exe.manifest, der oben geändert wurde
  5. Zeichen & Speichern Sie die Datei

Kopieren .application zu Anwendungsdateien Ordner * Hinweis: Dieser Schritt ist nicht unbedingt erforderlich ist, sondern hält nur die Backup-Dateien ein.

Manifestdateien und gepatchte Bibliotheken können jetzt in Ihre Implementierungsumgebung kopiert werden.

+0

Danke für die detaillierten Informationen. Markieren Sie diese Antwort als die Lösung, da es die Schritte detailliert. –

+0

Für unsere Anwendung mussten wir das Flag Full-Trust-Anwendung in den Projekteinstellungen für partielle DLL-Update auch nicht nur stark setzen Benennung – VMAtm

1

ClickOnce ermittelt die aktualisierten DLLs für Sie, Ihre Kunden müssen nicht die vollen 150 MB herunterladen, sondern nur die aktualisierten. Der einzige Nachteil ist, dass Sie immer noch alle 150 MB hochladen müssen.

Ich habe eine ClickOnce-Anwendung bei meinem Kunden, die so funktioniert, etwa 40MB bleibt immer gleich. Keine zusätzlichen Arbeiten erforderlich.

+0

+1: Das gleiche hier. Es ist eine 20-minütige Bereitstellung, aber dauert etwa 10 Sekunden für meine Kunden zum Download der Diffs. –

+0

yeah, der Upload alles immer saugt ein wenig, esp. bei der Bereitstellung aus der Ferne (und das Klicken des Clients einmal Repository wächst und wächst und wächst ...) –

+0

Es ist nicht so sehr das Starten auf dem Client, das ein Problem ist. Ich möchte wissen, wie die Master-Dateiliste auf dem Server mit nur einer DLL, die ich selbst kompiliert habe, gepatcht werden kann, ohne das gesamte Produkt neu zu erstellen oder die Click-Once-Installationsgruppe neu zu erstellen. Ich bin auf der Suche nach einer "DLL in diesen Ordner auf dem Server kopieren und bearbeiten Sie diese Textdatei und klicken Sie auf einmal startet die Verwendung der neuen DLL" Art der Antwort. –

0

Angenommen, Sie arbeiten in der Live-Umgebung auf dem Client-System, sollten Sie in der Lage sein, eine DLL zu ersetzen, indem Sie sie über die vorherige DLL im Installationsordner kopieren. Ich denke, der Ort der Clickonce-Installationen unter Windows XP ist C: \ Dokumente und Einstellungen \ Benutzerprofil \ Lokale Einstellungen \ Apps.

+0

Dies funktioniert für einen einzelnen Client. Ich suche nach einer Lösung, wo ich eine einzelne DLL manuell auf dem Server (auf den ich direkten Zugriff habe) patchen kann, damit alle Clients die neue DLL bekommen. –

2

Ich habe das gleiche Problem hier. Ich denke, Sie müssen die spezifische Datei in den ClickOnce-Ordner kopieren. Bearbeiten Sie die Manifest- und die Anwendungsdateien mit MageUI. Erhöhen Sie die Versionsnummer in beiden Dateien. Nicht sicher, aber die ClickOnce auf Clientseite wird erwartet, die Datei zu downloaden, die geändert wurde.

+2

Das hat für mich funktioniert, aber es ist ein ernsthafter Kopfschmerz. Es stellte sich heraus, dass es einfacher war, die ClickOnce-Installation einfach neu zu erstellen und neu zu implementieren (so schmerzhaft das auch war). Schade :( –

Verwandte Themen