SORU
15 Aralık 2011, PERŞEMBE


Nasıl zamanı bunu tespit etmek için .NET sürüm 4.5 anda çalışan kod?

Ben yükleyin .http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=27541, 4.5 Geliştirici önizleme NET 'yerine' .NET 4.0 sürümü.

Ancak, tespit için eski yol .NET çatısı sürüm dönüş 4.0 (daha doğrusu benim PC 4.0.30319.17020), yerine 4.5 (geriye uyumluluk için emin muhtemelen, ya?) gibi görünüyor:

using System;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var version = Environment.Version;
            Console.WriteLine(version.ToString());
            Console.ReadKey();
        }
    }
}

Şimdi soru şu:nasıl benim kod gerçekten idam tarafından tespit etmek .NET 4.5?

CEVAP
17 Aralık 2011, CUMARTESİ


CLR arasında açık bir ayrım yapmak gerekir (yani "") çalışma zamanı ve çerçeve kütüphaneler (yani "") çerçevesinde. Ya ilk kodunuzu çalıştırmak için, kodunuzu karşı derlenmiş ve daha sonra kullanır. Bu terimi kullanırken ne yazık ki ".NETsürüm

installed framework versions*****. Bu, ancak, aslında çalışma zamanında kullandığınız yazmıyor.

4.5 ama 2.0 vs 3.0 veya 3.5 Environment.Version her zaman bu çerçeve CLR sürüm 2.0 kullanma gibi 2.0 döndü beri hiçbir faydası yoktu emin değilim. Bentahminbuçerçeve4.5 CLR sürümü hala Environment.Version 4.0 döndüren açıklıyor 4.0.x bile bu durumda.

Sizin için çalışabilir bir teknik çekirdek kitaplıkları (mscorlib, Sistemi.tür, yöntem veya özellik için kontrol etmektir Çekirdek, vb.) bilirdin yalnızca belirli bir başlangıç var .NET çatısı sürüm.

Örneğin, ReflectionContext sınıf ile tamamen yeni gibi görünüyor .NET çerçeve ve rahat 4.5 mscorlib yaşıyor. Böyle bir şey yapabilirsin.

  public static bool IsNet45OrNewer()
  {
      // Class "ReflectionContext" exists from .NET 4.5 onwards.
      return Type.GetType("System.Reflection.ReflectionContext", false) != null;
  }

Söylediği her şeye sahip olmak, hangisi bilmen gereken soru neden olabilir .NET sürümü kullanıyorsunuz. Eğer varsa sadece ihtiyacınız olan özelliklere erişmek için muhtemelen incelikle başka bir şey (eski sürümlerde kullanılabilir) geri dönüş deneyin.

GüncellemeBu dönem dikkat edin .NET 4.5 ifade eder, tüm paket için bir kaç derlemeler oluşturan temel sınıf kütüphaneleri (KÜÇÜK) ve daha fazla (topluca "çerçeve") artı çalışma zamanı kendisi, yani CLR - her ikisi de olabilir, farklı sürümleri gibi oldu " dedi.

Microsoft için çalışmak ve (tek) işlevi veya API eksikliği arkasındaki gerçek sebep içine hiçbir fikir var". almak istemiyorum NET çatısı sürüm" ama ben eğitimli bir tahmin yapabilirsiniz.

  1. Bu fonksiyon/API sağlamak ne olduğu belli değil.Hatta KÜÇÜK bireysel derlemeler (derleme/dosya) ortak bir sürüm paylaşmayın. Örneğin, ile .NET 3.0 ve 3.5, mscorlib.dll vardı, sürüm 2.0.x XML ve İK sadece yeni derlemeleri olsa 3.0 bir şey vardı. Bendüşünüyorumbile .NET 3.5 System.ServiceModel.dll hala 3.0 sürümü vardı.x. Söylemeye çalıştığım şey, çerçeve tüm derlemeler Birleşik sürüm yok. Ne bir API mı, söyle, System.Environment.FrameworkVersiondönüş? Sürüm olsaydı dönüş "sembolik" küçük değeri olur 4.5 gibi sürüm, değil mi?). eğer öyle olsaydı (hatta ne

  2. Çok özelBazı yeni özellikler artı yeni bir sürümü bir parçası olmak, mevcut sürümleri için SPs geliyor, olabilir. Özellik denetimi yapmak, uygulama gayet iyi çalışabiliröncekisürümleri, açık sürüm denetimi ile unneccessarily yeni sürümü kendini kısıtlamak olsa güncelleştirildi. Bu bir örnek yok .Genel olarak bu, ama NET Dünya (ve Windows kendisi (WMI) ve oldu.

  3. İstedim."Şu anda bir uygulama tarafından kullanılıyor bile değil . çerçevenin" sürümü ile çalışmak için bir yoldur emagine edebilirim ^em>arzubunları sağlamak için. 14* *(bkz: "Sürüm" için geçerli olan kavramlar için paragraf .Kontrol Yok uzun ve lanetli bir geçmişi var NET gibi), yerel/Win32 dünya. Örneğin, insanlar yanlış GetVersion GetVersionEx API, uygulama yazdıklarında en yeni biliyorlardı sürümünü çalıştırdığınızda, sadece kontrol tarafından kullanılır. Uygulama Windows'un yeni bir sürümünü çalıştırdığınızda, bu halde çalıştırmak, değil miözelliklerionlar gerçekten hala orada kullanıyorlardı. Microsoft bu gibi konuları kabul böylece hatta bazı API sağlanmamış olabilir .NET.

Bu arada bu ne açıklamalar recommends Microsoft GetVersion bölüm fonksiyonu

Geçerli işletim sistemi tanımlama genellikle en iyi yol değildir belirli bir işletim sistemine sahip olup olmadığını belirlemek için mevcut. Bu işletim sistemi yeni özellikler eklendi olmuş olabilir çünkü. yeniden dağıtılabilir bir DLL. GetVersionEx belirlemek için kullanmak yerine işletim sistemi, platform ya da, varlığı için sürüm numarası testi özelliği kendisi.

Windows Team Blog da bu konuda bir şey to say vardır.

Tüm bu Windows ve yerel programlama üzereydi, ama kavram ve tehlikeleri aynı olduğunu biliyorum .NET uygulamaları çerçevesinde ve CLR.

Özellik ile kontrol geri dönüş böylece uygulamanız aşağıya doğru uyumlu olduğundan emin olmak için çok daha güvenilir ve sağlam bir yol olduğunu söyleyebilirim. Yalnızca uygulamanızın belirli bir sürümüyle çalışmak istiyorsanız .NET veya daha yeni ve özel bir şey yapmak ve geriye doğru uyumluluk güvenme .Kendisi NET.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dougownsall

    dougownsall

    7 EKİM 2007
  • ibebrent

    ibebrent

    23 Temmuz 2007
  • TechShowsYou

    TechShowsYou

    3 Mart 2011