Answers:
将其加载到Reflector中,看看它引用了什么?
例如:
在PowerShell中,可以使用以下命令获取目标运行时:
$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).ImageRuntimeVersion
我根据Ben Griswold的回答将其改编为PowerShell 。
如果要了解Visual Studio中指定的目标框架版本,请使用:
$path = "C:\Some.dll"
[Reflection.Assembly]::ReflectionOnlyLoadFrom($path).CustomAttributes |
Where-Object {$_.AttributeType.Name -eq "TargetFrameworkAttribute" } |
Select-Object -ExpandProperty ConstructorArguments |
Select-Object -ExpandProperty value
你应该得到类似
.NETFramework,Version = v4.5.2
dotPeek是一个很好的(免费)工具来显示此信息。
如果您在使用Reflector时遇到一些问题,那么这是一个不错的选择。
您可以使用ILDASM ...
ildasm.exe C:\foo.dll /metadata[=MDHEADER] /text /noil
并在输出中检查“元数据部分”。就像这样:
元数据部分:0x424a5342,版本:1.1,额外版本:0,len版本:12,版本:v4.0.30319
'version'标签将告诉您.NET Framework版本。在上面的示例中是4.0.30319
// Metadata section: 0x424a5342, version: 1.1, extra: 0, version len: 12, versio n: v4.0.30319
您有几个选择:要以编程方式从托管代码中获取它,请使用Assembly.ImageRuntimeVersion:
Dim a As Assembly = Reflection.Assembly.ReflectionOnlyLoadFrom("C:\path\assembly.dll")
Dim s As String = a.ImageRuntimeVersion
从v2.0开始,从命令行开始,如果双击“ MANIFEST”并寻找“ Metadata version”,ildasm.exe将显示该文件。确定图像的CLR版本
使用ILSpy http://ilspy.net/
开源的,免费的,肯定是一个选择,因为现在已经支付了反射器。
只是简单
var tar = (TargetFrameworkAttribute)Assembly
.LoadFrom("yoursAssembly.dll")
.GetCustomAttributes(typeof(TargetFrameworkAttribute)).First();
GetCustomAttributes
没有一个TargetFrameworkAttribute
。但是ImageRuntimeVersion可以正常工作,它会检索二进制文件所针对的正确CLR。我需要为其构建目标框架版本。
我迅速编写了此C#控制台应用程序来执行此操作:
https://github.com/stuartjsmith/binarydetailer
只需将目录作为参数传递,它将尽力告诉您其中每个dll和exe的网络框架
在这里扩展答案,如果有从属程序集,则可能会爆炸。如果您很幸运,并且知道受抚养人在哪里(或者甚至更幸运,它在GAC中),那么这可能会有所帮助...
using System.Reflection;
using System.Runtime.Versioning;
// ...
{
AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_ReflectionOnlyAssemblyResolve);
var asm = System.Reflection.Assembly.LoadFrom(@"C:\Codez\My.dll");
var targetFrameAttribute = asm.GetCustomAttributes(true).OfType<TargetFrameworkAttribute>().FirstOrDefault();
targetFrameAttribute.Dump();
}
Assembly CurrentDomain_ReflectionOnlyAssemblyResolve(object sender, ResolveEventArgs args)
{
var name = args.Name;
if (name.StartsWith("Depends"))
return System.Reflection.Assembly.ReflectionOnlyLoadFrom(@"C:\Codez\Depends.dll");
return System.Reflection.Assembly.ReflectionOnlyLoad(args.Name);
}
参考:https : //weblog.west-wind.com/posts/2006/Dec/22/Reflection-on-Problem-Assemblies