Comment faire correspondre la version ClickOnce Publish à la version du fichier AssemblyInfo.cs ?

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

Question

Chaque fois que je publie l'application dans Cliquez une fois Je reçois la mise à jour du numéro de révision de un.Existe-t-il un moyen d'obtenir automatiquement cette modification pour modifier le numéro de version dans le fichier AssemblyInfo.cs (tous nos rapports d'erreurs examinent la version de l'assembly) ?

Était-ce utile?

La solution

Nous utilisons Team Foundation Server Team Build et avons ajouté un bloc au fichier TFSBuild.proj. AfterCompile target pour déclencher la publication ClickOnce avec notre numéro de version préféré :

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

Le PublishApplicationVersion La variable est générée par une tâche MSBuild personnalisée pour utiliser le numéro TFS Changeset, mais vous pouvez utiliser votre propre tâche personnalisée ou un solution existante pour obtenir le numéro de version du fichier AssemblyInfo.

Cela pourrait théoriquement être fait dans votre fichier de projet (qui n'est de toute façon qu'un script MSBuild), mais je vous déconseille le déploiement à partir d'un ordinateur de développeur.

je suis sûr que d'autres Intégration continue Les solutions (CI) peuvent gérer cela de la même manière.


Modifier: Désolé, j'ai compris votre question à l'envers.Passer du numéro de version ClickOnce au fichier AssemblyInfo devrait être faisable.Je suis sûr que les tâches de la communauté MSBuild (lien ci-dessus) ont une tâche pour mettre à jour le fichier AssemblyInfo, vous auriez donc juste besoin d'une tâche personnalisée pour extraire le numéro de version du XML de configuration ClickOnce.

Cependant, vous pouvez également envisager de modifier votre rapport d'erreurs pour inclure également la version de publication ClickOnce :

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

Autres conseils

J'ai implémenté cela récemment en utilisant des tâches personnalisées.Un problème que j'ai trouvé lors de l'implémentation de cela avec ClickOnce est que tous vos fichiers DLL sont mis à jour.Cela amène la mise à jour ClickOnce à télécharger tous les fichiers d'application à chaque mise à jour.Cela contourne les fonctionnalités intéressantes du déploiement ClickOnce où seuls les fichiers modifiés sont retéléchargés dans une mise à jour.

Juste quelque chose à penser lors de la mise en œuvre de quelque chose comme ça avec ClickOnce.

Pas:

  1. Utilisez un numéro de version incrémentiel externe (si vous exploitez un serveur d'intégration continue comme CruiseControl.NET, il provient de l'étiquette de build).
  2. Utilisez GlobalVersionInfo.cs (lien de fichier référencé par tous les projets de votre solution) pour conserver la version actuelle et la mettre à jour sur la build avec la tâche AssemblyInfo du Communauté MSBuild Tâches.
  3. Scénario mage outil de ligne de commande du SDK .NET pour mettre à jour le manifeste ClickOnce, en utilisant la même version (voir le -v et -mv interrupteurs).

BTW, un bonus intéressant est que, chaque fois que vous publiez automatiquement une version de déploiement ClickOnce plus récente via le script d'intégration, si vous spécifiez également la version minimale de mage.exe (identique à la version), alors chaque utilisateur sera automatiquement mis à jour sur la prochaine application. lancement.

Vous devrez probablement créer un morceau de code qui met à jour AssemblyInfo.cs en fonction du numéro de version stocké dans le fichier .csproj.(La version de déploiement ClickOnce est stockée dans une balise XML.)

Vous modifieriez ensuite votre fichier .csproj pour exécuter ce morceau de code lorsque la génération Publish|Release est effectuée.Les gens de MSBuild ont blogué sur la façon d'effectuer des actions personnalisées lors de certains types de build ;vérifier la Blog de l'équipe MSBuild.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top