Получить сборку в PCL
У меня есть следующая строка кода в .NET 4.5, которую я пытаюсь создать как переносимую библиотеку классов. Цель состоит в том, чтобы получить версию сборки:
this.GetType().Assembly.GetName().Version.Major;
Проблема заключается в том, что Assembly.GetName() недоступен в PCL. Есть ли способ получить версию сборки в PCL?
Я знаю, что можно проанализировать Assembly.FullName, но я хочу лучшее решение.
Ответы
Ответ 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);
}
}