195 votes

Comment puis-je obtenir la version de l'assemblage en cours d'exécution ?

J'essaie d'obtenir la version de l'assemblage en cours d'exécution en C# 3.0 en utilisant le code suivant :

var assemblyFullName = Assembly.GetExecutingAssembly().FullName;
var version = assemblyFullName .Split(',')[1].Split('=')[1];

Existe-t-il une autre façon de procéder ?

328voto

Chris Baxter Points 8085

Deux options... quel que soit le type d'application, vous pouvez toujours invoquer :

Assembly.GetExecutingAssembly().GetName().Version

Si un Formulaires Windows vous pouvez toujours y accéder via l'application si vous recherchez spécifiquement la version du produit.

Application.ProductVersion

L'utilisation GetExecutingAssembly pour une référence d'assemblage n'est pas toujours possible. C'est pourquoi je trouve personnellement utile de créer une classe d'aide statique dans les projets où je peux avoir besoin de référencer l'assemblage sous-jacent ou la version de l'assemblage :

// A sample assembly reference class that would exist in the `Core` project.
public static class CoreAssembly
{
    public static readonly Assembly Reference = typeof(CoreAssembly).Assembly;
    public static readonly Version Version = Reference.GetName().Version;
}

Je peux alors faire référence à CoreAssembly.Version dans mon code.

7 votes

S'il est déployé avec ClickOnce, vous devez vérifier System.Deployment.Application.ApplicationDeployment.CurrentD‌​eployment.CurrentVer‌​sion

0 votes

Ce qui serait intéressant : Où faut-il spécifier la version réelle ? J'ai spécifié la AssemblyVersion et la AssemblyFileVersion dans mon AssemblyInfo.cs et tout ce que j'obtiens de l'appel à la méthode ci-dessus est : 0.0.0.0 alors que j'ai spécifié 1.0.0.

0 votes

@Zainodis Si vous faites référence à la ClickOnce mentionnée par @Justin, elle est spécifiée dans la version Publish dans les propriétés du projet (c'est-à-dire sans rapport avec AssemblyVersion ou AssemblyFileVersion).

44voto

Sharunas Bielskis Points 478

Dans MSDN, Méthode Assembly.GetExecutingAssembly La méthode "getexecutingassembly" fait l'objet d'une remarque : pour des raisons de performance, vous ne devez appeler cette méthode que lorsque vous ne savez pas, au moment de la conception, quel est l'assemblage en cours d'exécution.

La méthode recommandée pour récupérer un objet Assembly qui représente l'assembly courant est d'utiliser la fonction Type.Assembly d'un type trouvé dans l'assemblage.

L'exemple suivant l'illustre :

using System;
using System.Reflection;

public class Example
{
    public static void Main()
    {
        Console.WriteLine("The version of the currently executing assembly is: {0}",
                          typeof(Example).Assembly.GetName().Version);
    }
}

/* This example produces output similar to the following:
   The version of the currently executing assembly is: 1.1.0.0

Bien sûr, cela ressemble beaucoup à la réponse avec la classe d'aide "public static class CoreAssembly", mais, si vous connaissez au moins un type d'assemblage exécuté, il n'est pas nécessaire de créer une classe d'aide, et cela vous fait gagner du temps.

22voto

Hammad Qureshi Points 51
using System.Reflection;
{
    string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}

Remarques de MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx :

En GetEntryAssembly peut renvoyer null lorsqu'un assemblage géré a été chargé à partir d'une application non gérée. Par exemple, si une application non gérée crée une instance d'un composant COM écrit en C#, un appel à la fonction GetEntryAssembly du composant C# renvoie null parce que le point d'entrée du processus était un code non géré plutôt qu'un assemblage géré.

2 votes

+1. GetEntryAssembly (vs GetCallingAssembly ou GetExecutingAssembly ) semble être la seule chose qui fonctionne lorsqu'elle est appelée à partir d'une bibliothèque de référence.

9voto

Daniel K Points 449

Product Version peut être préféré si vous utilisez le versionnage via GitVersion ou un autre logiciel de versionnage.

Pour l'obtenir à partir de votre bibliothèque de classes, vous pouvez appeler System.Diagnostics.FileVersionInfo.ProductVersion :

using System.Diagnostics;
using System.Reflection;

//...

var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion

enter image description here

6voto

Elroy Flynn Points 998

Cela devrait suffire :

Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();

6 votes

Ces 3 lignes pourraient devenir 1 : return Assembly.GetExecutingAssembly().GetName().Version.ToString() ; .............

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