.net-assembly portable-class-library system.reflection

.net assembly - Obtener la versión de montaje en PCL



.net-assembly portable-class-library (3)

Tengo la siguiente línea de código en .NET 4.5 que estoy tratando de construir como Portable Class Library. Su propósito es conseguir la versión de montaje:

this.GetType().Assembly.GetName().Version.Major;

El problema es que Assembly.GetName () no está disponible en PCL. ¿Hay una manera de obtener la versión de montaje en PCL?

Sé que es posible analizar Assembly.FullName, pero quiero una solución mejor.


Ahora uso lo siguiente:

[assembly: AssemblyTitle(AssemblyInfo.AssemblyTitle)] [assembly: AssemblyProduct(AssemblyInfo.AssemblyProduct)] [assembly: AssemblyVersion(AssemblyInfo.AssemblyVersion)] [assembly: AssemblyFileVersion(AssemblyInfo.AssemblyFileVersion)] [assembly: AssemblyInformationalVersion(AssemblyInfo.AssemblyInformationalVersion)] internal class AssemblyInfo { public const string AssemblyTitle = "..."; public const string AssemblyProduct = "..."; public const string AssemblyVersion = "1.0.0.0"; public const string AssemblyFileVersion = "1.0.0.0"; public const string AssemblyInformationalVersion = "1.0.0.0-dev"; }

Esto me permite hacer referencia a cualquiera de las constantes dentro del ensamblaje sin usar la reflexión, por ejemplo, AssemblyInfo.AssemblyProduct .


Está apuntando a una plataforma basada en Silverlight (Silverlight 4 o superior, Windows Phone antes de la versión 8). Esas plataformas no soportaban el método GetName() . Para esas plataformas, puedes definir un método de extensión como este:

public static class AssemblyExtensions { public static AssemblyName GetName(this Assembly assembly) { return new AssemblyName(assembly.FullName); } }


public static string Version { get { var assembly = typeof(MyType).GetTypeInfo().Assembly; // In some PCL profiles the above line is: var assembly = typeof(MyType).Assembly; var assemblyName = new AssemblyName(assembly.FullName); return assemblyName.Version.Major + "." + assemblyName.Version.Minor; } }