我的工具是用 .Net Core 3.1 编写的。它使用 Mono.Cecil 分析给定的程序集,该程序集以 .NET 4.7.2 为目标
给定一个AssemblyDefinition
对象及其程序集引用之一,我希望获得AssemblyDefinition
与该引用对应的对象。
这是一个示例监视窗口内容:
姓名 | 价值 | 类型 |
---|---|---|
一种 | {SharpTop.DB.DL,版本=1.0.0.0,文化=中性,PublicKeyToken=null} | Mono.Cecil.AssemblyDefinition |
asmRef | {mscorlib,版本=4.0.0.0,文化=中性,PublicKeyToken=b77a5c561934e089} | Mono.Cecil.AssemblyNameReference |
现在我想解决对实际定义的引用:
var asm = a.MainModule.AssemblyResolver.Resolve(asmRef);
但是,在检查时asm.MainModule.FileName
我得到C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.1.12\mscorlib.dll
这是错误的,因为原始程序集的目标是 .NET 4.7.2,所以我的理解是它的 mscorlib 引用应该解析为c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll或c :\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2
我的结论 - 我错误地解决了程序集引用。那么-正确的方法是什么?