我在.NET 4.5中有以下代码行,我试图构建为可移植类库。它的目的是获得程序集版本:在PCL中获取程序集版本
this.GetType().Assembly.GetName().Version.Major;
问题是Assembly.GetName()在PCL中不可用。有没有办法在PCL中获得程序集版本?
我知道可以解析Assembly.FullName,但我想要一个更好的解决方案。
我在.NET 4.5中有以下代码行,我试图构建为可移植类库。它的目的是获得程序集版本:在PCL中获取程序集版本
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;
}
}
您针对的是基于Silverlight的平台(Silverlight 4或更高版本,Windows 8之前的Windows Phone)。这些平台不支持GetName()
方法。这些平台中,可以定义一个扩展方法是这样的:
public static class AssemblyExtensions
{
public static AssemblyName GetName(this Assembly assembly)
{
return new AssemblyName(assembly.FullName);
}
}
我现在使用下面的:
[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
。
这是一个很棒的建议!我通常将我的语义版本信息移动到共享文件,这是一个简单的改变。 – bryanbcook 2015-05-05 16:27:58
请不要使用'Assembly.GetExecutingAssembly()'。首先,它非常昂贵,其次它有各种各样的问题w.r.t.当呼叫方被内联时。因此,我们不会在Windows应用商店中公开它。在静态方法中,您可以使用'typeof(MyType).GetTypeInfo()。Assembly'。在实例方法中,你应该使用'GetType()。GetTypeInfo()。Assembly'。 – 2013-05-14 03:48:53
谢谢,我改变了。在我的PCL(Profile95)中没有可用的GetTypeInfo(),但我可以直接在该类型上调用Assembly。 – pauldendulk 2013-05-14 20:29:07
你是对的。 GetTypeInfo()仅用于发布.NET 4.5平台(.NET 4.5,Windows Store和Windows Phone 8)。 – 2013-05-14 20:42:13