1

在运行时是否可以发现我自己的编译所针对的 .NET Framework 版本?我正在编写的环境允许我编写在另一台机器上编译的 C#,但我不知道可用的语言版本是 2.0 CLR。我想编写一个输出到指示目标框架的日志文件的测试。

为此,我猜编译的程序集必须携带该信息。

这个问题不是如何列出运行时机器上的所有框架,因为所有版本都已安装。这不是那个问题的重复。这也不是如何使用 System.Environment.Version 确定 CLR 的重复。我也没有尝试在编译时检测目标 .NET 运行时。这需要是运行时检测,以便我可以将其发送到日志。

4

2 回答 2

0

反编译器有时会告诉你。例如,Telerik 的免费 justdecompile 显示了这一点,但并非适用于所有程序集

目标框架图片

在这里放大一点

在此处输入图像描述

于 2012-11-12T16:15:03.820 回答
0

此信息存储在程序集中,因为它是运行 EXE 文件所必需的。我用这个函数阅读了目标框架:

    public string GetTargetFramework()
    {
        System.Reflection.Assembly assembly;
        Attribute[] attributes;
        System.Runtime.Versioning.TargetFrameworkAttribute targetFrameworkAttribute;

        assembly = Assembly.GetEntryAssembly();
        attributes = AssemblyDescriptionAttribute.GetCustomAttributes(assembly);
        foreach(Attribute item in attributes)
        {
            targetFrameworkAttribute = item as System.Runtime.Versioning.TargetFrameworkAttribute;
            if(targetFrameworkAttribute != null)
                return targetFrameworkAttribute.FrameworkDisplayName;
        }
        return null; // "TargetFrameworkAttribute not found"
    }

我特意明确了命名空间。

于 2018-06-16T06:53:06.433 回答