Estoy tratando de obtener la versión de ensamblaje en ejecución en C # 3.0 usando el siguiente código:
var assemblyFullName = Assembly.GetExecutingAssembly().FullName;
var version = assemblyFullName .Split(',')[1].Split('=')[1];
¿Hay otra forma adecuada de hacerlo?
c#
.net
.net-assembly
usuario1
fuente
fuente
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion
ClickOnce
versión mencionada por @Justin, se especifica en laPublish
pestaña dentro de las propiedades del proyecto (es decir, no está relacionada con AssemblyVersion o AssemblyFileVersion).HomeController
, por lo que en Razor:v@(Assembly.GetAssembly(typeof(MyWebProject.Mvc.Controllers.HomeController)).GetName().Version.ToString(2))
En MSDN, Assembly.GetExecutingAssembly Method , es un comentario sobre el método "getexecutingassembly", que por razones de rendimiento, debe llamar a este método solo cuando no sabe en el momento del diseño qué ensamblaje se está ejecutando actualmente.
La forma recomendada de recuperar un objeto de ensamblaje que representa el ensamblaje actual es usar la
Type.Assembly
propiedad de un tipo encontrado en el ensamblaje.El siguiente ejemplo ilustra:
Por supuesto, esto es muy similar a la respuesta con la clase auxiliar "clase estática pública CoreAssembly", pero, si conoce al menos un tipo de ensamblaje en ejecución, no es obligatorio crear una clase auxiliar y le ahorra tiempo.
fuente
Observaciones de MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx :
El
GetEntryAssembly
método puede volvernull
cuando se ha cargado un ensamblado administrado desde una aplicación no administrada. Por ejemplo, si una aplicación no administrada crea una instancia de un componente COM escrito en C #, seGetEntryAssembly
devuelve una llamada al método desde el componente C #null
, porque el punto de entrada para el proceso era un código no administrado en lugar de un ensamblado administrado.fuente
GetEntryAssembly
(vsGetCallingAssembly
orGetExecutingAssembly
) parece ser lo único que funciona cuando se llama desde una biblioteca de referencia.Esto debería hacer:
fuente
Finalmente me decidí
typeof(MyClass).GetTypeInfo().Assembly.GetName().Version
por una aplicación netstandard1.6. Todas las otras respuestas propuestas presentaron una solución parcial. Esto es lo único que me dio exactamente lo que necesitaba.Procedente de una combinación de lugares:
https://msdn.microsoft.com/en-us/library/x4cw969y(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/2exyydhb(v=vs.110).aspx
fuente
Product Version
puede preferirse si está utilizando el control de versiones a través de GitVersion u otro software de control de versiones.Para obtener esto desde la biblioteca de su clase, puede llamar a
System.Diagnostics.FileVersionInfo.ProductVersion
:fuente