2013-05-13 44 views
15

我在.NET 4.5中有以下代码行,我试图构建为可移植类库。它的目的是获得程序集版本:在PCL中获取程序集版本

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

问题是Assembly.GetName()在PCL中不可用。有没有办法在PCL中获得程序集版本?

我知道可以解析Assembly.FullName,但我想要一个更好的解决方案。

回答

21
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; 
     } 
    } 
+5

请不要使用'Assembly.GetExecutingAssembly()'。首先,它非常昂贵,其次它有各种各样的问题w.r.t.当呼叫方被内联时。因此,我们不会在Windows应用商店中公开它。在静态方法中,您可以使用'typeof(MyType).GetTypeInfo()。Assembly'。在实例方法中,你应该使用'GetType()。GetTypeInfo()。Assembly'。 – 2013-05-14 03:48:53

+0

谢谢,我改变了。在我的PCL(Profile95)中没有可用的GetTypeInfo(),但我可以直接在该类型上调用Assembly。 – pauldendulk 2013-05-14 20:29:07

+0

你是对的。 GetTypeInfo()仅用于发布.NET 4.5平台(.NET 4.5,Windows Store和Windows Phone 8)。 – 2013-05-14 20:42:13

2

您针对的是基于Silverlight的平台(Silverlight 4或更高版本,Windows 8之前的Windows Phone)。这些平台不支持GetName()方法。这些平台中,可以定义一个扩展方法是这样的:

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

我现在使用下面的:

[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

+0

这是一个很棒的建议!我通常将我的语义版本信息移动到共享文件,这是一个简单的改变。 – bryanbcook 2015-05-05 16:27:58

相关问题