在PCL中获取装配版本

kls*_*kls 17 system.reflection .net-assembly portable-class-library

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

this.GetType().Assembly.GetName().Version.Major;
Run Code Online (Sandbox Code Playgroud)

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

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

pau*_*ulk 22

    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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 请不要使用`Assembly.GetExecutingAssembly()`.首先,它非常昂贵,其次,当内联呼叫方时,它有各种各样的问题.因此,我们不会在Windows应用商店中公开它.在静态方法中,您可以使用`typeof(MyType).GetTypeInfo().Assembly`.在实例方法中,您应该使用`GetType().GetTypeInfo().Assembly`. (5认同)

Sam*_*ell 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";
}
Run Code Online (Sandbox Code Playgroud)

这允许我在不使用反射的情况下引用组件中的任何常量,例如AssemblyInfo.AssemblyProduct.