Vra

Ek moet programatically bepaal of NET 3.5 geïnstalleer. Ek het gedink dit sou maklik wees:

<% Response.Write(Environment.Version.ToString()); %>

Watter terugkeer "2.0.50727.1434" sodat daar geen so 'n geluk ...

In my navorsing het ek dat daar 'n paar eerder onduidelik register sleutels ek kan kyk na, maar ek is nie seker of dit is die roete om te gaan. Is daar iemand enige voorstelle?

Was dit nuttig?

Oplossing

Jy kan probeer:

static bool HasNet35()
{
    try
    {
        AppDomain.CurrentDomain.Load(
            "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
        return true;
    }
    catch
    {
        return false;
    }
}

@ Nick : Goeie vraag , ek sal dit probeer in 'n bietjie.

Kev

Ander wenke

Dit is omdat tegnies NET 3.5 is 'n uitbreiding van die 2,0 raamwerk. Die vinnigste manier is om 'n vergadering van NET 3.5 sluit en kyk of dit breek.

System.Web.Extensions

'n goeie vergadering wat net in weergawe 3.5 is ingesluit. Ook dit blyk dat jy met behulp van ASP.NET om hierdie tjek uit te voer, dit regtig beperk omdat jy nie in staat is om die lêer stelsel of die register hardloop so die beskermde modus van ASP.NET sal wees. Of jy kan altyd problematisch probeer laai 'n vergadering van die GAC wat net moet wees in NET 3.5, maar jy kan in te voer om probleme met weer regte.

Dit kan een van daardie tye waar jy jou self te vra "Wat is ek probeer om te bereik?" en kyk of daar alternatiewe roetes.

@Kev, regtig graag jou oplossing. Dankie vir die hulp.

Die gebruik van die register die kode sal soos volg lyk:

RegistryKey key = Registry
        .LocalMachine
        .OpenSubKey("Software\\Microsoft\\NET Framework Setup\\NDP\\v3.5");
return (key != null);

Ek sou nuuskierig wees as een van hierdie sal werk in 'n medium trust omgewing (hoewel ek werk in volle vertroue so dit maak nie saak wat ek tans besig op).

@komradekatz, jou oplossing hieronder uit MSDN vir gerief vir ander op soek na hierdie. Ek hou nie van hierdie oplossing omdat dit gebruik maak van die gebruiker agent om die weergawe te bepaal. Dit is nie lewensvatbaar vir wat ek nodig het (Ek skryf 'n klas biblioteek wat nodig het om te weet of NET 3.5 geïnstalleer). Ek bevraagteken ook hoe betroubaar hierdie oplossing kan bewys te wees.

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<HTML>
  <HEAD>
    <TITLE>Test for the .NET Framework 3.5</TITLE>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8" />
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    var dotNETRuntimeVersion = "3.5.0.0";

    function window::onload()
    {
      if (HasRuntimeVersion(dotNETRuntimeVersion))
      {
        result.innerText = 
          "This machine has the correct version of the .NET Framework 3.5."
      } 
      else
      {
        result.innerText = 
          "This machine does not have the correct version of the .NET Framework 3.5." +
          " The required version is v" + dotNETRuntimeVersion + ".";
      }
      result.innerText += "\n\nThis machine's userAgent string is: " + 
        navigator.userAgent + ".";
    }

    //
    // Retrieve the version from the user agent string and 
    // compare with the specified version.
    //
    function HasRuntimeVersion(versionToCheck)
    {
      var userAgentString = 
        navigator.userAgent.match(/.NET CLR [0-9.]+/g);

      if (userAgentString != null)
      {
        var i;

        for (i = 0; i < userAgentString.length; ++i)
        {
          if (CompareVersions(GetVersion(versionToCheck), 
            GetVersion(userAgentString[i])) <= 0)
            return true;
        }
      }

      return false;
    }

    //
    // Extract the numeric part of the version string.
    //
    function GetVersion(versionString)
    {
      var numericString = 
        versionString.match(/([0-9]+)\.([0-9]+)\.([0-9]+)/i);
      return numericString.slice(1);
    }

    //
    // Compare the 2 version strings by converting them to numeric format.
    //
    function CompareVersions(version1, version2)
    {
      for (i = 0; i < version1.length; ++i)
      {
        var number1 = new Number(version1[i]);
        var number2 = new Number(version2[i]);

        if (number1 < number2)
          return -1;

        if (number1 > number2)
          return 1;
      }

      return 0;
    }

    -->
    </SCRIPT>
  </HEAD>

  <BODY>
    <div id="result" />
  </BODY>
</HTML>

Op my rekenaar hierdie uitgange:

  

Hierdie masjien het die korrekte weergawe   van die NET Framework 3.5.

     

User Agent string Hierdie masjien is:   Mozilla / 4.0 (compatible; MSIE 7.0;   Windows NT 6.0; SLCC1; NET CLR   2.0.50727; NET CLR 3.0.04506; InfoPath.2; NET CLR 1.1.4322; NET   CLR 3.5.21022; Zune 2,5).

Nog 'n interessante vonds is die teenwoordigheid van gemeentes hier:

  

C: \ Program Files \ Verwysing   Gemeentes \ Microsoft \ Framework \ v3.5

'n Mens sou dink Microsoft sal 'n tjek vir "jongste weergawe" te bou in die raamwerk.

As jy wil 'n spesifieke weergawe van net geïnstalleer moet word vereis en kan die verspreiding van jou aansoek te beheer, jy moet regtig gebruik ClickOnce . Dit laat jou toe om die minimum vereiste weergawe van die NET Framework wat geïnstalleer moet word spesifiseer, en dit sal net kyk wanneer dit geïnstalleer sodat al jou daaropvolgende starters is nie belemmer word deur 'n onnodige tjek.

Ook, met ClickOnce kry jy die opdatering gratis. Hoekom sou nie iemand wil om dit te gebruik?

Om 'n ClickOnce aansoek, net regs kliek op die projek binne Visual Studio en gaan na die Publiseer-instellings. Dit sal 'n spesiale bou van jou program wat jy op jou webwerf kan plaas te skep. Wanneer gebruikers aflaai die program, sal die installeerder te gaan vir enige voorvereistes soos Net vir jou.

Een opsie is om op te spoor 4.0 met behulp van die weergawe string:

    Environment.Version.CompareTo(new Version(4, 0));

dan sedert 2.0 en 2.5 aandeel 'n CLR weergawe nommer, moet hierdie word distenguished deur die nagaan van die register. Sedert daardie weergawes reeds vrygestel, die snare om te kyk vir is bekend.

Sonder enige vergadering laai en vang uitsonderings (wat stadig), gaan vir die klas API veranderinge tussen 2,0 en 3,5. Mono Klas Status is baie nuttig vir hierdie. Byvoorbeeld kan jy kyk vir GC.Collect Method (Int32, GCCollectionMode) wat in mscorlib en is in 3.5 bygevoeg.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top