簡體   English   中英

如何詢問運行時編譯目標是哪個.NET Framework?

[英]How to ask runtime which .NET Framework was targeted by compile?

在運行時是否可以發現我自己的編譯目標是哪個.NET Framework版本? 我正在編寫的環境允許我編寫在另一台計算機上編譯的C#,但是我不知道可用的語言版本,除了它是2.0 CLR。 我想編寫一個輸出到日志文件的測試,以指示目標框架。

為此,我猜編譯后的程序集將必須攜帶該信息。

這個問題不是如何列出運行時計算機上的所有框架,因為已安裝所有最新版本。 這不是該問題的重復。 這也不是如何使用System.Environment.Version確定CLR的副本。 我也沒有嘗試在編譯時檢測目標.NET運行時。 這需要進行運行時檢測,因此我可以將其發送到日志。

反編譯器有時會告訴您。 例如,Telerik的免費justdecompile可以顯示此信息,但不能顯示所有程序集

TargetFrameworkPicture

在這里放大更多

在此處輸入圖片說明

此信息存儲在程序集中,因為必須運行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"
    }

我故意明確了命名空間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM