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 GetExecutingAssemblypara 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.Versionen mi código según sea necesario.
ClickOnceversión mencionada por @Justin, se especifica en la Publishpestañ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.Assemblypropiedad 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 GetEntryAssemblymétodo puede volver nullcuando 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 GetEntryAssemblydevuelve 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 GetCallingAssemblyor 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().Versionpor 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