2011-06-27 32 views
47

¿Cómo puedo obtener programáticamente la versión actual del producto en C#?¿Cómo obtener la versión actual del producto en C#?

Mi código:

VersionNumber = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); 

estoy recibiendo VersionNumber = 1.0.0.0, pero la versión actual es la 1.0.0.12.

+1

comprobar lo que está regresando en 'System.Reflection.Assembly.GetExecutingAssembly(). GetName()' –

+0

Además, usted está buscando para la versión de ensamblado o está buscando realmente la versión de la aplicación ClickOnce ? –

+1

"la versión actual es 1.0.0.12" - ¿Dónde? ¿Qué ves para la versión del archivo en el explorador (vista de mosaicos o propiedades, versión) – Rup

Respuesta

26

Obtuve la respuesta a mi pregunta es simplemente dar la referencia a System.Deployment.Application y aunque no funcionará en el desarrollo del estudio visual, pero funcionará una vez que se implemente la aplicación.

//using System.Deployment.Application; 
    //using System.Reflection; 
    public string CurrentVersion 
    { 
     get 
     { 
      return ApplicationDeployment.IsNetworkDeployed 
        ? ApplicationDeployment.CurrentDeployment.CurrentVersion.ToString() 
        : Assembly.GetExecutingAssembly().GetName().Version.ToString(); 
     } 
    }  
3

Prueba esto:

var thisApp = Assembly.GetExecutingAssembly(); 
AssemblyName name = new AssemblyName(thisApp.FullName); 
VersionNumber = "v. " + name.Version; 

También, ver this artículo de MSDN en la propiedad AssemblyName.Version.

+0

sigue siendo 1.0.0.0 –

+0

¿ES que la assemblyversion o el assemblyFileVersion? –

+0

el código con el que respondió. En realidad, la cosa es que necesito la versión actual de la aplicación que estamos construyendo. Entonces, ¿cómo puedo obtener eso? Lo mismo que tenemos en las propiedades de la solución. –

57

Hay tres versiones: ensamblaje, archivo y producto. Para obtener la versión del producto:

using System.Reflection; 
using System.Diagnostics; 
Assembly assembly = Assembly.GetExecutingAssembly(); 
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); 
string version = fileVersionInfo.ProductVersion; 
+0

Bastante ridículo es que dos ajustes de versión que están cómodamente uno al lado del otro en las propiedades del proyecto ni siquiera son de la misma clase internamente. Diablos, incluso las propiedades en las dos clases no son lo mismo; la última parte se denomina "revisión" en la versión de ensamblaje, pero como "privada" en la versión de archivo. – Nyerguds

5

Otro enfoque para conseguir la versión del producto (que se especifica mediante el AssemblyInformationalVersionAttribute) es

private static string AssemblyProductVersion 
{ 
    get 
    { 
     object[] attributes = Assembly.GetExecutingAssembly() 
      .GetCustomAttributes(typeof(AssemblyInformationalVersionAttribute), false); 
     return attributes.Length == 0 ? 
      "" : 
      ((AssemblyInformationalVersionAttribute)attributes[0]).InformationalVersion; 
    } 
} 
+1

Esto es mejor en circunstancias donde el acceso al sistema de archivos no está disponible (por ejemplo, SqlClr). – rrreee

2

En C# tiene que utilizar la reflexión y diagnóstico

Assembly assembly = Assembly.GetExecutingAssembly(); 
FileVersionInfo fileVersionInfo = FileVersionInfo.GetVersionInfo(assembly.Location); 
string version = fileVersionInfo.ProductVersion; 
+1

Esto no funciona si tiene una versión implementada en red o si usa otro proyecto como proyecto de inicio. –

3

Todas estas respuestas solicitan el montaje con .GetExecutingAssembly().
Si tiene este código en un dll, devolverá el número de versión dll.

Cambie esa llamada por GetCallingAssembly() para obtener el lugar en su código que quería saber.

/// <summary> 
/// Returns version like 2.1.15 
/// </summary> 
public static String ProductVersion 
{ 
    get 
    { 
     return new Version(FileVersionInfo.GetVersionInfo(Assembly.GetCallingAssembly().Location).ProductVersion).ToString(); 
    } 
} 
10
System.Reflection.Assembly.GetEntryAssembly().GetName().Version 
+0

debería ser un comentario. –

+0

GetEntryAssembly es el punto clave para obtener la aplicación en ejecución incluso si el código está en un ensamblado de DLL –

Cuestiones relacionadas