18

我在 .NET 4.5 中有以下代码行,我正在尝试将其构建为可移植类库。它的目的是获取汇编版本:

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

问题是 Assembly.GetName() 在 PCL 中不可用。有没有办法在 PCL 中获取汇编版本?

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

4

3 回答 3

23
    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;
        }
    }
于 2013-05-13T15:12:11.913 回答
7

我现在使用以下内容:

[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.

于 2014-04-23T20:03:45.740 回答
2

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

public static class AssemblyExtensions
{
    public static AssemblyName GetName(this Assembly assembly)
    {
        return new AssemblyName(assembly.FullName);
    }
}
于 2013-05-14T03:58:32.300 回答