如何获得程序集的目标框架?

问题描述

我正在使用 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": ""
  }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...