web-dev-qa-db-fra.com

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

J'essaie d'obtenir la version en cours d'exécution de Assembly en C # 3.0 à l'aide du code suivant:

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

Y a-t-il une autre manière appropriée de le faire?

160
user1

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

Assembly.GetExecutingAssembly().GetName().Version

Si une application Windows Forms , vous pouvez toujours y accéder via une application si vous recherchez spécifiquement la version du produit.

Application.ProductVersion

Utiliser GetExecutingAssembly pour une référence d'assemblage n'est pas toujours une option. En tant que tel, je trouve personnellement utile de créer une classe d'assistance statique dans les projets où il peut être nécessaire de référencer la version ou la version d'assemblage sous-jacente:

// 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;
}

Ensuite, je peux référencer proprement CoreAssembly.Version dans mon code selon les besoins.

276
Chris Baxter

Dans MSDN, méthode Assembly.GetExecutingAssembly, remarque à propos de la méthode "getexecutingassembly", qui, pour des raisons de performances, doit être appelée méthode uniquement lorsque vous ne savez pas, au moment de la conception, ce que Assembly exécute actuellement.

La méthode recommandée pour extraire un objet Assembly représentant l'ensemble actuel consiste à utiliser la propriété Type.Assembly d'un type trouvé dans Assembly.

L'exemple suivant 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'assistance "classe statique publique CoreAssembly", mais si vous connaissez au moins un type d'exécution Assembly, il n'est pas obligatoire de créer une classe d'assistance et vous fait gagner du temps.

34
Sharunas Bielskis
using System.Reflection;
{
    string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}

Remarques de MSDN http://msdn.Microsoft.com/en-us/library/system.reflection.Assembly.getssryassembly%28v=vs.110%29.aspx :

La méthode 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 méthode GetEntryAssembly à partir du composant C # renvoie null, car le point d'entrée du processus était plutôt du code non géré. qu'une Assemblée dirigée.

18
Hammad Qureshi

Cela devrait faire:

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

J'ai finalement opté pour typeof(MyClass).GetTypeInfo().Assembly.GetName().Version pour une application netstandard1.6. Toutes les autres réponses proposées présentaient une solution partielle. C'est la seule chose qui m'a donné exactement ce dont j'avais besoin.

Provenant d'une combinaison de lieux:

https://msdn.Microsoft.com/en-us/library/x4cw969y (v = vs.110) .aspx

https://msdn.Microsoft.com/en-us/library/2exyydhb (v = vs.110) .aspx

1
Victor Ude

_Product Version_ peut être préférable si vous utilisez le versioning via GitVersion ou un autre logiciel de gestion de versions.

Pour obtenir cela depuis votre bibliothèque de classe, 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

1
Daniel