2011-02-09 16 views

Respuesta

231

dos opciones ... independientemente del tipo de aplicación siempre se puede invocar:

Assembly.GetExecutingAssembly().GetName().Version 

Si una aplicación Windows Forms, siempre se puede acceder a través de la aplicación si específicamente en busca de la versión del producto.

Application.ProductVersion 

Usando GetExecutingAssembly para una referencia de ensamblado no es siempre una opción. Como tal, yo personalmente encuentro útil para crear una clase auxiliar estática en proyectos en los que puedo necesitar hacer referencia a la versión de ensamblado o montaje subyacente:

// 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 limpiamente referencia CoreAssembly.Version en mi código según sea necesario.

+5

Si se implementa con ClickOnce, es necesario comprobar 'System.Deployment.Application.ApplicationDeployment.CurrentDeployment.CurrentVersion' –

+0

Qué haría Sea interesante: ¿Dónde necesita especificar la versión actual? Especifiqué AssemblyVersion y AssemblyFileVersion en AssemblyInfo.cs y todo lo que recibo de la llamada de método anterior es: 0.0.0.0 a pesar de haber especificado 1.0.0 – AgentKnopf

+0

@Zainodis Si se refiere a la versión 'ClickOnce' mencionada por @Justin, es especificado en la pestaña 'Publicar' dentro de las propiedades del proyecto (es decir, no relacionado con AssemblyVersion o AssemblyFileVersion). –

5

Esto debería hacer:

Assembly assem = Assembly.GetExecutingAssembly(); 
AssemblyName aName = assem.GetName(); 
return aName.Version.ToString(); 
+4

estas 3 líneas podrían convertirse en 1: return Assembly.GetExecutingAssembly(). GetName(). Version.ToString(); ............. – Alexandre

17
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 método GetEntryAssembly puede volver null cuando un ensamblado administrado se ha cargado desde una aplicación no administrada. Por ejemplo, si una aplicación no administrada crea una instancia de un componente COM escrito en C#, una llamada al método GetEntryAssembly del componente C# devuelve null, porque el punto de entrada para el proceso era un código no administrado en lugar de un ensamblado administrado.

+2

+1. 'GetEntryAssembly' (vs' GetCallingAssembly' o 'GetExecutingAssembly') parece ser lo único que funciona cuando se llama desde una biblioteca de referencia. – drzaus

29

En MSDN, Assembly.GetExecutingAssembly Method, es la observación acerca del método "GetExecutingAssembly", que por razones de rendimiento, debe llamar a este método sólo cuando no se sabe en tiempo de diseño lo que el montaje se está ejecutando actualmente.

La forma recomendada de recuperar un objeto de ensamblaje que representa el ensamblaje actual es usar la propiedad Type.Assembly de un tipo que se encuentra 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 clase de ayuda "clase estática pública CoreAssembly", pero, no sé si por lo menos un tipo de conjunto de la ejecución, ISN No es obligatorio crear una clase de ayuda y ahorra tiempo.

+0

Mucho mejor que las otras respuestas usando GetExecutingAssembly –

Cuestiones relacionadas