首页 > 解决方案 > 如何获取程序集的目标框架?

问题描述

我正在使用 Mono.Cecil 加载不同的程序集,我想知道程序集是针对 .NET Framework 还是 .NET Core。

我尝试的是检索自定义属性 TargetFrameworkAttribute :

[assembly:TargetFramework(".NETFramework,Version=v4.0", FrameworkDisplayName = ".NET Framework)]

使用下面的代码

    var targetFrameWorkAttributes = assemblyDefinition.CustomAttributes
        .Where(attribute => attribute.AttributeType.Name == nameof(TargetFrameworkAttribute));
    var customAttribute = targetFrameWorkAttributes.FirstOrDefault();
    var customAttributeValue =  customAttribute?.ConstructorArguments.FirstOrDefault().Value.ToString();

这里的问题是,并非所有程序集的元数据中都有这个属性。

我的问题是:

除了检索自定义属性之外,还有其他方法可以检测程序集是否针对 .NET Core 或 .NET Framework 运行时?

注意,我曾想过对于 .NET Core,我可以以某种方式解析*.deps.json和检索 runtimeTarget 对象,但它仅适用于 .NET Core,而且会很复杂。

  "runtimeTarget": {
    "name": ".NETCoreApp,Version=v3.1",
    "signature": ""
  }

标签: c#.netreflectionassembliesmono.cecil

解决方案


推荐阅读