27 votes

Comment puis-je obtenir la version ClickOnce Publish pour correspondre à la version du fichier AssemblyInfo.cs?

Chaque fois que je publie l'application dans ClickOnce, je l'obtiens pour mettre à jour le numéro de révision par un. Existe-t-il un moyen d'obtenir cette modification automatiquement pour modifier le numéro de version dans le fichier AssemblyInfo.cs (tous nos rapports d'erreur se rapportent à la version de l'assembly)?

30voto

Jason Stangroome Points 2264

Nous utilisons Serveur Team Foundation Build d'Équipe et ont ajouté un bloc à la TFSBuild.proj est AfterCompile cible pour déclencher la ClickOnce publier avec notre version préférée numéro:

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

Le PublishApplicationVersion variable est générée par une coutume tâche MSBuild utilisation de la TSF certain nombre de modifications, mais vous pouvez utiliser votre propre tâche ou d'une solution existante pour obtenir le numéro de version du fichier AssemblyInfo.

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

Je suis sûr que d'autres solutions CI peut gérer cela de la même façon.


Edit: Désolé, vous avez votre question à l'envers. En allant de la ClickOnce numéro de version dans le fichier AssemblyInfo devrait être faisable. Je suis sûr que le MSBuild missions de la Communauté (lien ci-dessus) ont une tâche de mise à jour du fichier AssemblyInfo donc, si vous voulez juste besoin d'une tâche personnalisée pour tirer le numéro de version de la ClickOnce de configuration xml.

Cependant, vous pouvez aussi envisager de changer votre rapport d'erreur d'inclure le ClickOnce publier en version:

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

4voto

Todd Points 137

J'ai récemment implémenté cela en utilisant des tâches personnalisées. Un problème que j'ai trouvé avec l'implémentation de ceci avec ClickOnce est que tous vos fichiers DLL sont mis à jour. Ainsi, la mise à jour ClickOnce télécharge 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 téléchargés à nouveau dans une mise à jour.

Juste quelque chose à penser lors de l'implémentation de quelque chose comme ça avec ClickOnce.

2voto

Rinat Abdullin Points 13520

Étapes:

  1. L'utilisation externe de l'incrémentation du numéro de version (si vous utilisez un serveur d'intégration continue comme CruiseControl.NET puis il s'agit de la construction de l'étiquette).
  2. Utilisation GlobalVersionInfo.cs (le lien vers le fichier référencé par tous les projets dans votre solution) pour contenir la version actuelle et la mettre à jour sur le construire avec le AssemblyInfo tâche à partir de la MSBuild Communauté des tâches.
  3. Script Mage outil de ligne de commande de l' .NET SDK pour mettre à jour le ClickOnce manifeste, en utilisant la même version (voir l' -v et -mv des commutateurs).

BTW, un joli bonus, c'est que, chaque fois que vous publiez automatiquement un nouveau déploiement ClickOnce version via l'intégration de script, si vous spécifiez également la version minimale de mage.exe (même version), ensuite, tous les utilisateurs seront automatiquement mis à jour sur le prochain lancement de l'application.

0voto

Judah Himango Points 27365

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 devez ensuite modifier 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 pendant certains types de build; consultez le blog de l'équipe MSBuild .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X