Respuestas:
Dos opciones ... independientemente del tipo de aplicación, siempre puede invocar:
Assembly.GetExecutingAssembly().GetName().Version
Si es una aplicación de Windows Forms , siempre puede acceder a través de la aplicación si busca específicamente la versión del producto.
Application.ProductVersion
Usar GetExecutingAssembly
para una referencia de ensamblaje no siempre es una opción. Como tal, personalmente me parece útil crear una clase auxiliar estática en proyectos en los que pueda necesitar hacer referencia al ensamblaje subyacente o la versión del ensamblaje:
// 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;
}
Entonces puedo hacer referencia limpia CoreAssembly.Version
en mi código según sea necesario.
ClickOnce
versión mencionada por @Justin, se especifica en la Publish
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:
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
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.
using System.Reflection;
{
string version = Assembly.GetEntryAssembly().GetName().Version.ToString();
}
Observaciones de MSDN http://msdn.microsoft.com/en-us/library/system.reflection.assembly.getentryassembly%28v=vs.110%29.aspx :
El GetEntryAssembly
método puede volver null
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 #, se GetEntryAssembly
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.
GetEntryAssembly
(vs GetCallingAssembly
or GetExecutingAssembly
) parece ser lo único que funciona cuando se llama desde una biblioteca de referencia.
Esto debería hacer:
Assembly assem = Assembly.GetExecutingAssembly();
AssemblyName aName = assem.GetName();
return aName.Version.ToString();
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
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
:
using System.Diagnostics;
using System.Reflection;
//...
var assemblyLocation = Assembly.GetExecutingAssembly().Location;
var productVersion = FileVersionInfo.GetVersionInfo(assemblyLocation).ProductVersion
System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion