Kla*_*sen 50 .net assemblies version
从命令行(或通过任何方式),我如何确定.NET程序集所需的CLR版本?
我需要确定程序集是否需要2.0或4.0 CLR版本.
Fer*_*hez 34
一个澄清......
所有提到的方法的问题是,如果程序集是针对.NET framework 4.0,4.5或4.5.1编译的,它们将返回4.0版.
在运行时以编程方式计算此版本的方法是使用给定程序集的System.Runtime.Versioning.TargetFrameworkAttribute,例如
using System;
using System.Linq;
using System.Reflection;
using System.Runtime.Versioning;
...
object[] list = Assembly.GetExecutingAssembly().GetCustomAttributes(true);
var attribute = list.OfType<TargetFrameworkAttribute>().First();
Console.WriteLine(attribute.FrameworkName);
Console.WriteLine(attribute.FrameworkDisplayName);
Run Code Online (Sandbox Code Playgroud)
将返回
a.FrameworkName ".NETFramework,Version=v4.0" string
a.FrameworkDisplayName ".NET Framework 4" string
a.FrameworkName ".NETFramework,Version=v4.5" string
a.FrameworkDisplayName ".NET Framework 4.5" string
a.FrameworkName ".NETFramework,Version=v4.5.1" string
a.FrameworkDisplayName ".NET Framework 4.5.1" string
Run Code Online (Sandbox Code Playgroud)
Meh*_*ari 33
class Program {
static void Main(string[] args) {
System.Console.WriteLine(
System.Reflection.Assembly.LoadFrom(args[0]).ImageRuntimeVersion);
}
}
Run Code Online (Sandbox Code Playgroud)
在最新的.NET Framework下编译并运行上述应用程序(因为较旧的CLR可能无法加载需要较新CLR的程序集)并运行它将路径传递给要作为命令行参数检查的程序集.
Rob*_*nto 10
这是另一个答案中建议的与.NET代码等效的PowerShell.使用PowerShell意味着您可以跳过几个步骤,例如创建和编译程序集.
在PowerShell提示符下,运行以下命令:
[System.Reflection.Assembly]::LoadFrom("C:\...\MyAssembly.dll").ImageRuntimeVersion
Run Code Online (Sandbox Code Playgroud)
默认情况下,PowerShell使用.NET v2运行时,因此您将获得针对v4的程序集的例外.Stack Overflow问题如何使用.NET 4运行时运行PowerShell?详细说明如果需要,可以更改方法.
这是一个功能强大的衬板,它将显示针对v4及更高版本的程序集的目标框架版本。
Resolve-Path($args) | Select @{N='Assembly'; E={$_ }}, @{N='TargetFramework'; E={(([Reflection.Assembly]::ReflectionOnlyLoadFrom($_).GetCustomAttributesData() | Where-Object { $_.AttributeType -like "System.Runtime.Versioning.TargetFrameworkAttribute" })).NamedArguments.TypedValue}} | Format-Table
Run Code Online (Sandbox Code Playgroud)
使用:
C:\test\> show-targetfw.ps1 *.dll
Assembly TargetFramework
-------- --------
C:\test\a.dll ".NET Framework 4.6.1"
C:\test\b.dll ".NET Framework 4.5.2"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
35662 次 |
最近记录: |