Determine framework (CLR) version of assembly

后端 未结 12 2311
生来不讨喜
生来不讨喜 2020-11-27 03:46

From the command line (or by any means really), how can I determine which CLR version a .NET assembly requires?

I need to determine if an assembly requires 2.0 or 4

12条回答
  •  孤城傲影
    2020-11-27 04:14

    As @mistika suggested, it is better to use ReflectionOnlyLoadFrom() rather than LoadFrom(). The downside of this is that calling GetCustomAttributes() on an assembly loaded with ReflectionOnlyLoadFrom() throws an exception. You need to call GetCustomAttributesData() instead:

    var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath);
    var customAttributes = assembly.GetCustomAttributesData();
    var targetFramework = customAttributes.FirstOrDefault(attr => attr.AttributeType.Equals(typeof(TargetFrameworkAttribute)));
    
    var frameworkName = string.Empty;
    var frameworkDisplayName = string.Empty;
    if (null != targetFramework)
    {
        if(targetFramework.ConstructorArguments.Any())
        {
            // first argument is the name of the framework.
            frameworkName = (string)targetFramework.ConstructorArguments[0].Value;
        }
    
        // search for a named argument called "FrameworkDisplayName"
        var frameworkDisplayNameArg = targetFramework.NamedArguments.FirstOrDefault(arg => arg.MemberName.Equals("FrameworkDisplayName"));
        if (null != frameworkDisplayNameArg)
        {
            frameworkDisplayName = (string)frameworkDisplayNameArg.TypedValue.Value;
        }
    }
    
    Console.WriteLine("Framework Name: " + frameworkName);
    Console.WriteLine("Framework Display Name: " + frameworkDisplayName);
    

提交回复
热议问题