.net assembly 获取PCL中的程序集版本

.net assembly 获取PCL中的程序集版本,.net-assembly,portable-class-library,system.reflection,.net Assembly,Portable Class Library,System.reflection,在.NET4.5中,我有下面一行代码,我正试图将其构建为可移植类库。其目的是获取程序集版本: this.GetType().Assembly.GetName().Version.Major; 问题是Assembly.GetName()在PCL中不可用。有没有办法在PCL中获取程序集版本 我知道可以解析Assembly.FullName,但我需要更好的解决方案。您的目标是基于Silverlight的平台(Silverlight 4或更高版本,Windows Phone 8之前的版本)。这些平台不

在.NET4.5中,我有下面一行代码,我正试图将其构建为可移植类库。其目的是获取程序集版本:

this.GetType().Assembly.GetName().Version.Major;
问题是Assembly.GetName()在PCL中不可用。有没有办法在PCL中获取程序集版本


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

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

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

请不要使用
assembly.getExecutiveGassembly()
。首先,它非常昂贵,其次,当调用端被内联时,它有各种各样的问题。因此,我们不会在Windows应用商店中公开它。在静态方法中,可以使用
typeof(MyType).GetTypeInfo().Assembly
。在实例方法中,您应该使用
GetType().GetTypeInfo().Assembly
。谢谢,我更改了它。在我的PCL(Profile95)中没有可用的GetTypeInfo(),但我可以直接对该类型调用程序集。你是对的。GetTypeInfo()仅适用于post.NET 4.5平台(.NET 4.5、Windows应用商店和Windows Phone 8)。感谢您的回答,很抱歉回复太晚。我尝试了您的建议,但由于某些原因,我无法在PCL中使用Type.Assembly属性。我的目标是.NET4.5、商店和WindowsPhone8。根据文档,它应该可以工作,但由于某些原因它不能工作。@kls我已经更新了我的答案,以显示这两种变体。这是一个伟大的建议!我通常将语义版本信息移动到共享文件中,这是一个简单的更改。