Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get assembly version in PCL

I have the following line of code in .NET 4.5 that I am trying to build as Portable Class Library. It's purpose is to get assembly version:

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

The problem is that Assembly.GetName() is not available in PCL. Is there a way to get assembly version in PCL?

I know it is possible to parse Assembly.FullName, but I want a better solution.

like image 872
kls Avatar asked May 13 '13 08:05

kls


3 Answers

I now use the following:

[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";
}

This allows me to reference any of the constants within the assembly without using reflection, e.g. AssemblyInfo.AssemblyProduct.

like image 42
Sam Harwell Avatar answered Nov 10 '22 07:11

Sam Harwell


    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;
        }
    }
like image 87
pauldendulk Avatar answered Nov 10 '22 09:11

pauldendulk


You are targeting a Silverlight-based platform (Silverlight 4 or higher, Windows Phone before version 8). Those platforms didnt' support the GetName() method. For those platforms, you can define an extension method like this:

public static class AssemblyExtensions
{
    public static AssemblyName GetName(this Assembly assembly)
    {
        return new AssemblyName(assembly.FullName);
    }
}
like image 2
Immo Landwerth Avatar answered Nov 10 '22 09:11

Immo Landwerth