Sam*_*Sam 90 .net executable version
我有一个可执行文件,我想知道这个文件需要启动哪个版本的.NET框架.
有没有一种简单的方法可以在某处找到这些信息?
Sco*_*man 55
我认为你可以得到的最接近的是确定需要什么版本的CLR.您可以使用ILDASM并查看"MANIFEST"节点或Reflector并将"Application.exe"节点的dissasmbly视图视为IL来执行此操作.在这两种情况下都有一个注释表明CLR版本.在ILDASM中,注释为"//元数据版本",而在Reflector中,注释为"目标运行时版本".
以下是名为WindowsFormsApplication1.exe的.NET WinForms应用程序的示例:
ILDASM:
// Metadata version: v2.0.50727
.assembly extern mscorlib
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
.assembly extern System
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 2:0:0:0
}
Run Code Online (Sandbox Code Playgroud)
反射:
.module WindowsFormsApplication1.exe
.subsystem 0x0002
// MVID: {CA3D2090-16C5-4899-953E-4736D6BC0FA8}
// Target Runtime Version: v2.0.50727
Run Code Online (Sandbox Code Playgroud)
您还可以查看引用的程序集列表,并查找具有最高版本号的引用.
再次,使用ILDASM查看"MANIFEST"节点数据:
.assembly extern System.Drawing
{
.publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A ) // .?_....:
.ver 2:0:0:0
}
.assembly extern System.Core
{
.publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4..
.ver 3:5:0:0
}
Run Code Online (Sandbox Code Playgroud)
并使用Reflector,查看列出的每个引用的dissambly(仍为IL):
.assembly extern System.Core
{
.ver 3:5:0:0
.publickeytoken = (B7 7A 5C 56 19 34 E0 89)
}
Run Code Online (Sandbox Code Playgroud)
通过查找具有最高版本元数据的引用,您可以确定引用来自哪个Framework版本,这表明您需要为应用程序运行安装的相同版本的Framework.话虽如此,我不会将此视为100%可靠,但我认为它不会很快改变.
Asa*_*vic 42
使用记事本,三十年,200kb大小,预安装工具:
notepad appname.exe, F3直到.NET Framework,version=vX.Y出现v2....仍然容易100倍,然后安装千兆字节的点网分析工具和垃圾工作室.任何其他编辑器/查看器也可以打开二进制文件,如Notepad ++或totalCommander的文本/十六进制查看器列表器.
小智 19
您现在可以使用ILSpy来检查程序集的目标框架.加载程序集后,单击程序集节点的根,您可以在TargetFramework声明下找到信息:
[assembly: TargetFramework(".NETFramework,Version=v4.5", FrameworkDisplayName = ".NET Framework 4.5")]
Run Code Online (Sandbox Code Playgroud)
And*_*are 15
从您可以使用的代码,Assembly.ImageRuntimeVersion但通过查看文件可能最好的事情是使用反射器,看看mscorlib正在引用的版本.
编辑: 更好的是使用ildasm,打开你的程序集,然后查看程序集的清单.清单的第一行将告诉您为程序集构建的CLR 的确切版本.
小智 6
您可以使用 Powershell 在 Windows 中获取文件的 .NET 版本。以下脚本;
\n\n$path=\xe2\x80\x99.\\\xe2\x80\x99\n$ErrorActionPreference = "SilentlyContinue"\n$files=Get-ChildItem -Path $path -Recurse -include *.dll,*.exe\nforeach($file in $files)\n{\n $filename = $file.BaseName\n $version = $([System.Reflection.Assembly]::ReflectionOnlyLoadFrom($file.FullName).GetCustomAttributesData() |\n select-object -ExpandProperty ConstructorArguments | \n select-object -ExpandProperty Value | \n select-string -Pattern \'.NET\')\n Write-Output "$filename,$version"\n}\nRun Code Online (Sandbox Code Playgroud)\n\n\n\n请注意,结果提取了该文件夹中 exe 文件的 .NET 版本,但它也会对 dll 执行相同的操作。
\n| 归档时间: |
|
| 查看次数: |
77186 次 |
| 最近记录: |