Deux options ... quel que soit le type d'application, vous pouvez toujours appeler:
Assembly.GetExecutingAssembly().GetName().Version
S'il s'agit d'une application Windows Forms , vous pouvez toujours 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 une option. En tant que tel, je trouve personnellement utile de créer une classe d'assistance statique dans les projets où je peux avoir besoin de référencer l'assembly ou la version d'assembly sous-jacent:
// 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 si nécessaire.
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
ClickOnce
version mentionnée par @Justin, elle est spécifiée dans l'Publish
onglet dans les propriétés du projet (c'est-à-dire sans rapport avec AssemblyVersion ou AssemblyFileVersion).HomeController
, donc dans Razor:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
Dans MSDN, la méthode Assembly.GetExecutingAssembly , est une remarque sur la méthode "getexecutingassembly", qui pour des raisons de performances, vous devez appeler cette méthode uniquement lorsque vous ne savez pas au moment du design quel assembly est en cours d'exécution.
La méthode recommandée pour récupérer un objet Assembly qui représente l'assembly actuel consiste à utiliser la
Type.Assembly
propriété d'un type trouvé dans l'assembly.L'exemple suivant illustre:
Bien sûr, c'est très similaire à la réponse avec la classe d'assistance "classe statique publique CoreAssembly", mais, si vous connaissez au moins un type d'assembly en cours d'exécution, il n'est pas obligatoire de créer une classe d'assistance, et cela vous fait gagner du temps.
la source
Remarques de MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx :
La
GetEntryAssembly
méthode peut être renvoyéenull
lorsqu'un assembly 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 à laGetEntryAssembly
méthode à partir du composant C # retournenull
, car le point d'entrée du processus était du code non managé plutôt qu'un assembly managé.la source
GetEntryAssembly
(vsGetCallingAssembly
ouGetExecutingAssembly
) semble être la seule chose qui fonctionne lorsqu'il est appelé depuis une bibliothèque de référence.Cela devrait faire:
la source
J'ai finalement
typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
opté 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
la source
Product Version
peut être préférable si vous utilisez le contrôle de version via GitVersion ou un autre logiciel de contrôle de version.Pour obtenir ceci depuis votre bibliothèque de cours, vous pouvez appeler
System.Diagnostics.FileVersionInfo.ProductVersion
:la source