Comment puis-je obtenir l'exécution de la version de l'assembly?
Je suis en train d'essayer d'obtenir l'exécution de la version de l'assembly en C# 3.0 en utilisant le code suivant:
var assemblyFullName = Assembly.GetExecutingAssembly().FullName;
var version = assemblyFullName .Split(',')[1].Split('=')[1];
Est-il une autre bonne façon de le faire?
Vous devez vous connecter pour publier un commentaire.
Deux options... quel que soit le type d'application que vous pouvez toujours appeler:
Si un Windows Forms application, vous pouvez toujours accéder à l'application via si la recherche spécifiquement pour la version du produit.
À l'aide de
GetExecutingAssembly
pour une référence d'assembly est pas toujours une option. En tant que tel, personnellement, je trouve utile de créer un statique de la classe d'assistance dans les projets où j'ai peut-être besoin de référencer les sous-jacents de l'assemblée ou de l'assemblée de la version:Alors je peux proprement référence
CoreAssembly.Version
dans mon code que nécessaire.System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
ClickOnce
version mentionné par @Justin, il est spécifié sur lePublish
onglet dans les propriétés du projet (c'est à dire, pas liée à la AssemblyVersion ou AssemblyFileVersion).HomeController
, afin de Rasoir:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
typeof(HomeController).Assembly
, quel que soit il est exact que l'exécution de l'assemblée n'est pas toujours le meilleur choix.Application.ProductVersion
retourne AssemblyFileVersion.Assembly.GetExecutingAssembly().GetName().Version
retourne AssemblyVersion.Assembly Reference = typeof(CoreAssembly).GetTypeInfo().Assembly;
Dans MSDN, De l'assemblée.Méthode GetExecutingAssembly, est d'une remarque sur la méthode "getexecutingassembly", que pour des raisons de performances, vous devez appeler cette méthode uniquement si vous ne connaissez pas, au moment de la conception de ce montage est actuellement en cours d'exécution.
La méthode recommandée pour récupérer un objet d'Assemblage qui représente l'assemblée est d'utiliser le
Type.Assembly
propriété d'un type trouvé dans l'assemblée.L'illustre l'exemple suivant:
Bien sûr, cela est très similaire à la réponse de la classe helper "public static de la classe CoreAssembly", mais, si vous savez au moins un type de l'exécution de l'assemblée, il n'est pas obligatoire pour créer une classe d'assistance, et il permet d'économiser votre temps.
Remarques à partir de MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx:
La
GetEntryAssembly
méthode peut retournernull
quand géré assemblée 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 du composant visual C# renvoienull
, parce que le point d'entrée pour le processus a été de code non managé plutôt que d'une gestion de l'assemblée.GetEntryAssembly
(vsGetCallingAssembly
ouGetExecutingAssembly
) semble être la seule chose qui fonctionne lorsqu'il est appelé à partir de l'intérieur d'une bibliothèque de référence.Cela devrait le faire:
J'ai finalement réglé sur
typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
pour un netstandard1.6 app. Toutes les autres réponses proposées présenté une solution partielle. C'est la seule chose qui m'a fait exactement ce dont j'avais besoin.Proviennent d'une combinaison de places:
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 la gestion des versions via GitVersion ou autre logiciel de gestion des versions.Pour obtenir ce à partir de votre bibliothèque de classe, vous pouvez appeler
System.Diagnostics.FileVersionInfo.ProductVersion
: