Wie kann ich erreichen, dass die ClickOnce-Veröffentlichungsversion mit der Version der AssemblyInfo.cs-Datei übereinstimmt?

StackOverflow https://stackoverflow.com/questions/44470

Frage

Jedes Mal, wenn ich die Bewerbung veröffentliche Klicken Sie einmal Ich bekomme es hin, die Revisionsnummer um eins zu aktualisieren.Gibt es eine Möglichkeit, diese Änderung automatisch zu erhalten, um die Versionsnummer in der Datei „AssemblyInfo.cs“ zu ändern (alle unsere Fehlerberichte beziehen sich auf die Assembly-Version)?

War es hilfreich?

Lösung

Wir verwenden Team Foundation Server Team Build und haben den TFSBuild.projs einen Block hinzugefügt AfterCompile Ziel zum Auslösen der ClickOnce-Veröffentlichung mit unserer bevorzugten Versionsnummer:

<MSBuild Projects="$(SolutionRoot)\MyProject\Myproject.csproj"
         Properties="PublishDir=$(OutDir)\myProjectPublish\;
                     ApplicationVersion=$(PublishApplicationVersion);
                     Configuration=$(Configuration);Platform=$(Platform)"
         Targets="Publish" />

Der PublishApplicationVersion Die Variable wird von einer benutzerdefinierten MSBuild-Aufgabe generiert, um die TFS-Changeset-Nummer zu verwenden, Sie können sie aber auch verwenden Ihre eigene benutzerdefinierte Aufgabe oder ein vorhandene Lösung um die Versionsnummer aus der AssemblyInfo-Datei abzurufen.

Dies könnte theoretisch in Ihrer Projektdatei erfolgen (bei der es sich ohnehin nur um ein MSBuild-Skript handelt), ich würde jedoch von der Bereitstellung über einen Entwicklercomputer abraten.

Ich bin sicher, andere kontinuierliche Integration (CI)-Lösungen können dies ähnlich handhaben.


Bearbeiten: Entschuldigung, ich habe Ihre Frage falsch verstanden.Der Wechsel von der ClickOnce-Versionsnummer zur AssemblyInfo-Datei sollte möglich sein.Ich bin mir sicher, dass die MSBuild-Community-Aufgaben (Link oben) eine Aufgabe zum Aktualisieren der AssemblyInfo-Datei haben, sodass Sie lediglich eine benutzerdefinierte Aufgabe benötigen, um die Versionsnummer aus dem ClickOnce-Konfigurations-XML abzurufen.

Sie können jedoch auch erwägen, Ihre Fehlerberichterstattung so zu ändern, dass auch die ClickOnce-Veröffentlichungsversion einbezogen wird:

if (System.Deployment.Application.ApplicationDeployment.IsNetworkDeployed)
{
    Debug.WriteLine(System.Deployment.Application.ApplicationDeployment.
                                                        CurrentDeployment.CurrentVersion);
}

Andere Tipps

Ich habe dies kürzlich mithilfe einiger benutzerdefinierter Aufgaben implementiert.Ein Problem, das ich bei der Implementierung mit ClickOnce festgestellt habe, ist, dass alle Ihre DLL-Dateien aktualisiert werden.Dies führt dazu, dass das ClickOnce-Update bei jedem Update alle Anwendungsdateien herunterlädt.Dadurch werden die netten Funktionen der ClickOnce-Bereitstellung umgangen, bei denen bei einem Update nur die geänderten Dateien erneut heruntergeladen werden.

Nur etwas, worüber man nachdenken sollte, wenn man so etwas mit ClickOnce implementiert.

Schritte:

  1. Verwenden Sie eine externe inkrementelle Versionsnummer (wenn Sie einen Continuous-Integration-Server wie CruiseControl.NET nutzen, stammt diese vom Build-Label).
  2. Verwenden Sie GlobalVersionInfo.cs (Dateilink, auf den alle Projekte in Ihrer Lösung verweisen), um die aktuelle Version zu speichern und sie im Build mit der AssemblyInfo-Aufgabe aus dem zu aktualisieren MSBuild-Community Aufgaben.
  3. Skript Magier Befehlszeilentool aus dem .NET SDK, um das ClickOnce-Manifest mit derselben Version zu aktualisieren (siehe -v Und -mv Schalter).

Ein netter Bonus ist übrigens, dass jeder Benutzer bei der nächsten Anwendung automatisch aktualisiert wird, wenn Sie automatisch eine neuere ClickOnce-Bereitstellungsversion über das Integrationsskript veröffentlichen und auch die Mindestversion für mage.exe angeben (dieselbe Version wie die Version). Start.

Sie müssen wahrscheinlich einen Code erstellen, der AssemblyInfo.cs entsprechend der in der .csproj-Datei gespeicherten Versionsnummer aktualisiert.(Die ClickOnce-Bereitstellungsversion wird in einem XML-Tag gespeichert.)

Anschließend ändern Sie Ihre .csproj-Datei so, dass dieser Code ausgeführt wird, wenn der Publish|Release-Build ausgeführt wird.Die MSBuild-Leute haben darüber gebloggt, wie man bei bestimmten Build-Typen benutzerdefinierte Aktionen durchführt;Überprüf den Blog des MSBuild-Teams.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top