我在 .NET 4.5 中有以下代码行,我正在尝试将其构建为可移植类库。它的目的是获取汇编版本:
this.GetType().Assembly.GetName().Version.Major;
问题是 Assembly.GetName() 在 PCL 中不可用。有没有办法在 PCL 中获取汇编版本?
我知道可以解析 Assembly.FullName,但我想要一个更好的解决方案。
我在 .NET 4.5 中有以下代码行,我正在尝试将其构建为可移植类库。它的目的是获取汇编版本:
this.GetType().Assembly.GetName().Version.Major;
问题是 Assembly.GetName() 在 PCL 中不可用。有没有办法在 PCL 中获取汇编版本?
我知道可以解析 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;
}
}
我现在使用以下内容:
[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
.
您的目标是基于 Silverlight 的平台(Silverlight 4 或更高版本,版本 8 之前的 Windows Phone)。那些平台不支持该GetName()
方法。对于这些平台,您可以像这样定义扩展方法:
public static class AssemblyExtensions
{
public static AssemblyName GetName(this Assembly assembly)
{
return new AssemblyName(assembly.FullName);
}
}