Utviklet av | Microsoft |
---|---|
Siste versjon | 4,8 (18. april 2019) |
Miljø | Windows NT 4.0 , Windows 98 og nyere |
Type | Plattform |
Tillatelse | MS-EULA , BCL under delt kildelisens |
Nettsted | www.microsoft.com/net |
Microsoft .NET (uttales "dot net") er navnet på en samling datamaskinprodukter og teknologier fra Microsoft- selskapet for å gjøre applikasjoner lett bærbare på Internett. Målet er å gi en lokal web -server til å administrere tjenester og unngå outsourcing private data til en lagrings webtjeneste eller tredjeparts web hosting .
Den .NET plattformen er basert på flere teknologier:
Versjon | Versjonsnummer | C # versjon | Utgivelsesdato | Visuelt studio | Standard i Windows |
---|---|---|---|---|---|
1.0 | 1.0.3705.0 | C # 1.0 | 13. februar 2002 | Visual Studio .NET 2002 | Windows XP Tablet og Media Center versjoner |
1.1 | 1.1.4322.573 | C # 1.1 | 24. april 2003 | Visual Studio .NET 2003 | Windows Server 2003 |
2.0 | 2.0.50727.42 | C # 2.0 | 7. november 2005 | Visual Studio 2005 | Windows Server 2003 R2 |
3.0 | 3.0.4506.30 | C # 3.0 | 6. november 2006 | Windows Vista, Windows Server 2008 | |
3.5 | 3.5.21022.8 | C # 3.0 | 19. november 2007 | Visual Studio 2008 | Windows 7, Windows Server 2008 R2 |
4.0 | 4.0.30319.1 | C # 4.0 | 12. april 2010 | Visual Studio 2010 | Windows Server 2008 R2 SP1 |
4.5 | 4.5 | C # 5.0 | 12. september 2012 | Visual Studio 2012 | Windows 8, Windows Server 2012 |
4.5.1 | 4.5.50938.18408 | C # 5.0 | 17. oktober 2013 | Visual Studio 2013 | Windows 8.1, Windows Server 2012R2 |
4.6 | 4.6.00081 | C # 6.0 | 20. juli 2015 | Visual Studio 2015 | Windows 10, Windows Server 2016 |
4.6.2 | C # 7.0 | mars 2017 | Visual Studio 2017 | Windows 10 | |
4.7 | C # 7.1 | august 2017 | Visual Studio 2017 v15.3 | Windows 10 | |
4.7.1 | C # 7.2 | november 2017 | Visual Studio 2017 v15.5 | Windows 10 | |
4.7.2 | C # 7.3 | Mai 2018 | Visual Studio 2017 v15.7 | Windows 10 | |
4.8 | Mai 2019 | Windows 10 |
Net-rammeverket er basert på Common Language Infrastructure (eller CLI). Hensikten er å tilby et plattformuavhengig språk for både utvikling og utførelse. Den inkluderer funksjoner for håndtering av feil, søppeloppsamling , sikkerhet og interoperabilitet med COM-objekter. Den gjennomføring av CLI kalles Microsoft Common Language Runtime (eller CLR).
Se også: Dynamic Language Runtime og High Level Virtual Machine .
CLR og sikkerhetSikkerhet styres av CAS ( Code Access Security ). CAS er basert på et bevissystem knyttet til en bestemt forsamling . "Beviset" er opprinnelsen til forsamlingen (lokal installasjon, nedlasting fra Internett eller et intranett osv.). CAS bruker dette beviset for å bestemme tillatelsene gitt til koden. En kode kan be om autorisasjon for koden den kaller. Autorisasjonsforespørselen vet når CLR krysser anropstakken: hver samling av hver metode i stabelen blir sjekket. Hvis minst en av disse forsamlingene ikke har tillatelse til den forespurte tillatelsen, kastes et unntak.
Når en samling er lastet ut, utfører CLR forskjellige tester, inkludert validering og verifisering. Under validering bekrefter CLR at forsamlingen inneholder gyldig kode og metadata. Etterpå sjekker den at de interne tabellene er riktige. Sjekken bekrefter at koden ikke gjør noe farlig. Usikker kode vil bare bli utført hvis forsamlingen har tillatelsen 'hopp over bekreftelse' .
.NET Framework bruker appdomains (applikasjonsdomene) som en mekanisme for å isolere kode fra en prosess. Man appdomainkan opprettes og kode lastes eller lastes fra en appdomainuavhengig av de andre appdomain. De appdomains kan også være utformet uavhengig av hverandre med forskjellige sikkerhetsrettigheter. Dette kan bidra til å forbedre sikkerheten til et program ved å skille potensielt farlig kode fra resten. Imidlertid må utvikleren skille applikasjonen inn i flere underdomener, som ikke er CLRs ansvar.
CLR og Memory ManagementCLR tar seg av minnestyring (tildeling og frigjøring). Minnetildeling for forekomster av .NET-typer (objekter) gjøres kontinuerlig fra bunken . Så lenge det er en referanse til et objekt (direkte eller indirekte via en graf ), anses objektet å være i bruk av CLR. Så snart det ikke er mer referanse til et objekt ( dvs. det kan ikke lenger nås eller brukes lenger), gir søppeloppsamleren på engelsk : Garbage Collector , som kjører med jevne mellomrom på en lysprosess som er forskjellig fra den ene applikasjonen, objektet gratis fra hukommelsen.
NET-søppeloppsamlingen er ikke-deterministisk: den kjører bare etter at en viss mengde minne er tildelt, eller hvis det er en minnesvikt. Det er ingen måte å avgjøre når vilkårene for å utløse søppeloppsamleren er oppfylt. Hvert .NET-program har et sett med rotelementer som er pekere vedlikeholdt av CLR og peker på objekter i den administrerte dyngen. Dette inkluderer referanser til statiske objekter, til de som er definert som lokale variabler, til parametere definert i gjeldende omfang av koden og til slutt til prosessorregister. Når søppeloppsamleren kjører, suspenderer den applikasjonen, og for hvert objekt det refereres til i roten, oppregner den rekursivt ved hjelp av .NET-metadata og refleksjon , alle gjenstandene den kan nå og merkene. Deretter oppregnes alle gjenstandene på dyngen (som opprinnelig ble kontinuerlig tildelt) ved hjelp av refleksjon; alle gjenstander som ikke er merket blir da betraktet som avfall. Dette er merkingsfasen. Imidlertid etterlater denne prosessen deler av ledig minne mellom gjenstandene som det fortsatt er referert til; disse objektene komprimeres deretter ved hjelp av memcpy for å gjøre det brukte minneplassen kontinuerlig igjen. Adressene til pekerne blir oppdatert tilsvarende. Etter disse operasjonene fortsetter applikasjonen kjøringen.
I virkeligheten er søppeloppsamleren basert på et generasjonssystem . Hvert objekt tildeles en generasjon ; nyopprettede objekter tilhører generasjon 0 . Elementer som er igjen etter den første passeringen av søppelsamlingen promoteres til generasjon 1, og gjenstandene som gjenstår etter et andre pass, markedsføres til generasjon 2 (maksimumsnivå). Objekter med høyt generasjonsnivå skannes sjeldnere av søppeloppsamleren enn gjenstander med lavt generasjonsnivå. Denne algoritmen håper å forbedre effektiviteten til søppeloppsamleren, da gamle gjenstander har en lengre levetid enn nyere gjenstander.