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?
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.
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.
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.
Cela devrait faire:
Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();
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
_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
_