Получить сборку в PCL - программирование

Получить сборку в PCL

У меня есть следующая строка кода в .NET 4.5, которую я пытаюсь создать как переносимую библиотеку классов. Цель состоит в том, чтобы получить версию сборки:

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

Проблема заключается в том, что Assembly.GetName() недоступен в PCL. Есть ли способ получить версию сборки в PCL?

Я знаю, что можно проанализировать Assembly.FullName, но я хочу лучшее решение.

4b9b3361

Ответ 1

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

Ответ 2

Теперь я использую следующее:

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

Это позволяет мне ссылаться на любую из констант внутри сборки без использования отражения, например. AssemblyInfo.AssemblyProduct.

Ответ 3

Вы ориентируетесь на платформу Silverlight (Silverlight 4 или выше, Windows Phone до версии 8). Эти платформы не поддерживали метод GetName(). Для этих платформ вы можете определить метод расширения следующим образом:

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