.NET Framework

**NET Framework.** (״**דוט נט פריימוורק״ או ״תשתית דוט נט״**) היא שכבת תוכנה של מיקרוסופט שבאמצעותה מקודדות ומורצות תוכנות אחרות. שכבה זו מספקת לתוכנות שרצות מעליה סט כלים ושירותים כגון: ניהול זיכרון, שליטה בהתקני קלט/פלט, הצפנת הודעות וכולי, כך שהמתכנתים אינם צריכים לכתוב ספריות עזר המספקות שירותים אלה, אלא רק את הלוגיקה העיקרית של התוכנה. בנוסף, שימוש בשכבת תוכנה זו (הנקראת גם "סביבה וירטואלית") מאפשר להריץ תוכנות על פלטפורמות שונות: חלונות, לינוקס, יוניקס, טאבלטים, טלפונים סלולריים וכולי, בלי צורך בשינוי קוד התוכנה, כי התוכנה "מדברת" רק עם הסביבה הווירטואלית, וסביבה זו כבר יודעת איך לדבר עם הפלטפורמה הספציפית. **** הושקה ב־11 בפברואר 2002.

הפלטפורמה מספקת ממשק פיתוח אחיד הן לתוכנות שולחניות, לפיתוח אתרי Web, והן לתוכנות לסמארטפונים המריצים Windows Phone ואף מאפשרת לקשור ביחד התקני מחשוב שונים ולשתף ביניהם יישומים ומידע. היא פותחה כמענה תחרותי לארכיטקטורת J2EE מבית סאן מיקרוסיסטמס. בתחום התוכנות השולחניות, מספקת  ספרייה אחידה לפיתוח על כל משפחת מערכת ההפעלה חלונות, החל מגרסת Windows 98, במקום ממשקי תכנות היישומים של מערכות ההפעלה עצמן, או ספריית MFC.

עד שנת 2016, יצאו אחת עשרה גרסאות של פלטפורמה זו. בראש צוות הפיתוח עמד הישראלי יובל נאמן, לשעבר סגן נשיא חטיבת כלי הפיתוח במיקרוסופט העולמית.

שמה של הטכנולוגיה נלקח מסיומת האינטרנט שמציינת אתרים רשתיים, וזאת מכיוון שהטכנולוגיה פותחה בשיא בועת האינטרנט (אם כי גרסתה הרשמית הראשונה, גרסה 1.0, הוכרזה לאחר התפוצצות הבועה, בתחילת 2002). פלטפורמת פיתוח זו תומכת במגוון רב של שפות תכנות, ביניהן:
#C, VB.NET, #F, שפת BOO ו-Vala.
וגם מחוללי יישומים כדוגמת PowerBuilder וסביבות כמו דלפי, מאפשרים עבודה בסביבה זו.

## יכולות ומרכיבים עיקריים
שמאל|ממוזער|250px|סקירה חזותית של ה-CLI
***[[תפעוליות בינית]]** (Interoperability): מאחר שלעיתים קרובות נדרשת יכולת לתקשר עם תוכניות ישנות שלא פותחו ב-NET., סביבת ה-NET. מאפשרת להשתמש בפונקציונליות שמבוצעת בתוכניות שפותחו מחוץ לסביבת  גישה לרכיבי COM מתאפשרת באמצעות מרחבי השם System.Runtime.InteropServices ו-System.EnterpriseServices וניתן לגשת לפונקציות אחרות באמצעות P/Invoke.
* **מנוע Common Runtime**: שפות התכנות בסביבת NET. מהודרות לשפת ביניים הנקראת Common Intermediate Language &רלמ;(CIL). במימוש של מיקרוסופט שפת ביניים זו אינה מפורשת אלא מהודרת בזמן ריצה (; just-in-time) לשפת מכונה. צירוף רעיונות אלו נקרא Common Language Infrastructure, שאותו מימשה מיקרוסופט ב-Common Language Runtime &רלמ;(CLR).
* **אי תלות בשפה**: סביבת NET. משתמשת בתקן הנקרא Common Type System ובקיצור CTS. תקן זה מגדיר את כל טיפוסי הנתונים והמושגים התכנותיים הנתמכים על ידי ה-CLR וכיצד הם יתקשרו או לא יתקשרו זה עם זה. הודות לכך מאפשרת סביבת NET. המרת מופעים של טיפוסים בין שפות שונות שנתמכות ב-.
***ספריית מחלקות בסיסית** (**Base Class Library**): ספריית מחלקות בסיסית הנקראת Base Class Library ובקיצור BCL היא חלק מ-Framework Class Library, היא ספרייה של מחלקות המספקת פונקציונליות שניתן להשתמש בהן בכל שפות ה- ספרייה זו עוטפת פונקציות נפוצות כדוגמת קריאה וכתיבה של קבצים, ציור גרפי, תקשורת עם מסד נתונים ועבודה עם XML.
***ניידות**: התכנון של סביבת ה-NET. מאפשר ברמת התאוריה לפתח תוכנה שלא תהיה תלויה בפלטפורמה ושתעבוד במגוון פלטפורמות ללא צורך בהתאמת הקוד לכל אחת ואחת. מיקרוסופט פיתחה תמיכה בסביבת NET. בעבור Windows, Windows CE, ו-Xbox 360. הפירוט של ה-Common Language Infrastructure, של #C ושל C++/CLI מוגדר הן בתקני ECMA והן בתקני ISO, וכך יכולות חברות צד שלישי לפתח מימוש מתאים לסביבת NET. ולשפות התכנות שלה שיתאים לפלטפורמות אחרות.

## פריסה ושכיחות
מיקרוסופט הגישה את טכנולוגיית  לגופי תקינה בינלאומיים, והיא תוקננה בתקן ECMA-335. טכנולוגיה זו שואבת חלק ניכר מעקרונותיה ואף מעיצוב מערכת האובייקטים שלה, מטכנולוגיית Java. בין היתר, היא משתמשת ברכיב החוצץ בין התוכנית המתבצעת לבין מערכת ההפעלה, המכונה Common Language Runtime, ושפתו נקראת Common Intermediate Language (בקיצור CIL, "שפת ביניים משותפת"). רכיב זה מהווה למעשה מכונה וירטואלית, המפרידה בין החומרה לתוכנה. רכיב זה מאפשר לפתח בשפות שונות ועבור מעבדים שונים, כל עוד השפה מהודרת לקובץ היכול לרוץ על ה־CLR. רכיב נוסף **מהדר בדיוק בזמן** (JIT – Just In Time) מהדר בזמן ריצה את קוד הביניים של המכונה הווירטואלית לקוד מכונה טבעי של המחשב הנוכחי, ומעניק ליישום יכולת להתבצע במהירות הקרובה למהירות של יישום שהודר לקוד מכונה טבעי, וזאת בדומה לשפת Java.

מיקרוסופט עצמה פיתחה את שפת , וכמו כן יצרה מחדש את שפת Visual Basic תוך התאמתה באופן מלא לעקרונות תכנות מונחה עצמים, והיא מכונה Visual Basic .NET עבור סביבת  כמו כן יצרה מיקרוסופט גרסה של Java המכונה , גרסה של JavaScript המכונה JScript ואף גרסה "מנוהלת" (Managed) ל- המכונה . יצירת גרסאות  לשפות קיימות נועדה להקל על מפתחים שכבר היו מורגלים בשפות אלה, להגר אל סביבת  בנוסף, חברות אחרות יצרו גם הן גרסאות של שפות אחרות שניתן להדר אל סביבת CLI, כמו למשל גרסת  של שפת דלפי. כמו כן פותחה שפה XSharp.

אחת מתוצאות תקנונו של ה־CLI היא שגם גופים אחרים רשאים לפתח מימוש של תקן זה. ואכן, קיימים לפחות שני פרויקטים בקוד פתוח לפיתוח סביבות  שלא יהיו קשורות למערכות החלונות דווקא – פרויקט מונו של חברת נובל ופרויקט דוט-גנו (GNU.). שני פרויקטים אלה מפתחים גרסאות של ה-CLI עבור מערכות לינוקס ומק, ומערכות אחרות, כך שבדומה לטכנולוגיית ג'אווה, תוכנה שפותחה על פלטפורמה אחת תרוץ על כל פלטפורמה אחרת עליה מותקנת ה־CLI. במקביל שפות פיתוח אופייניות לקוד הפתוח יצאו בגרסאות שעברו התאמה לסביבת הפיתוח של ה-, כך למשל PHP יצאה בגרסה העונה לשם Phalanger.

## גרסאות

בשנת 2020 הוכרז כי לא יפותחו עוד גרסאות משמעותיות של NET Frameowrk, ושהפיתוח הפעיל יעבור לNET., ממשיכתה של NET Core.

## יתרונות
* תמיכה בפרוטוקול SOAP של ה-W3C, שמאפשר הפעלה ללא קשר בשפה מעל פרוטוקול HTTP.
* תמיכה בחלוקת משימות בין שרת לתוכנת לקוח כגון דפדפן.
* תמיכה בקריאה וכתיבה של קובצי XML
* ממשק משתמש גרפי חלונאי. במימוש של מיקרוסופט, מדובר למעשה במעטפת לפונקציות ה-C של Windows עצמה האחראיות ליצירת ממשק המשתמש. במימוש של "מונו", ממשק המשתמש מצויר על ידי אובייקט ציור הגרפיקה של 
* קריאה ל-API של מערכת ההפעלה מתוך התוכנית בצורה כמעט טבעית. פעולה לא טריוויאלית, בהתחשב בכך שה-API כתוב בשפת C, בעוד שפות  הן שפות אחרות, מוכוונות עצמים.
* אובייקטים משותפים שבהן משתמשות כל השפות התומכות בסביבה זו.

## חסרונות
*אחד החסרונות העיקריים של הסביבה הוא שקוד ההרצה שהיא יוצרת הוא קוד ביניים קריא, שאפשר בכלים פשוטים להמירו לכל שפה ב-, כך שההגנה על אלגוריתם והזכויות של מפתחיו, כמו גם חסימת עקיפת מנגנון בקרת רישוי תוכנה, הפכה להיות קשה יותר, מאשר בקוד מהודר של שפה טבעית. שיטת ההגנה המרכזית נקראת עירפול (obfuscation), שבו תוכן הקוד משונה לאותיות ומספרים חסרי משמעות. חברת מיקרוסופט נתנה את דעתה על בעיה זו והוציאה עם חבילת הסטודיו גרסה רזה של התוכנה בשם Dotfuscator, שיעודה לערפל קובץ הרצה (EXE, DLL) שהודר בסביבת ה-
* יש הטוענים נגד הנפח הרב של גרסאות ההרצה בגרסאות 3 של ה- בחלק ממערכות ההפעלה כדוגמת חלונות XP, כדי להריץ במחשב לקוח אפילו יישום קטן של ה- בגודל של 100K שמשתמש בתקשורת WCF, יש צורך להוריד ולהתקין קובצי הפצה בנפח של מאות מגהבייט. (מכיוון שכל גרסה נבנתה אחת על השנייה, מי שרוצה להשתמש בתכונות המעודכנות בגרסה 3.5. צריך להתקין גרסה 3 בנפח 50 מגהבייט, גרסה 3.5 בנפח 197 מגהבייט ועוד 250 מגהבייט ל-NET 3.5 SP1.). בגרסה 4 של ה-, בעיה זו תוקנה בחלקה (ונפח קובץ ההפצה שאיננו תלוי בגרסאות קודמות, עומד על 48 מגהבייט ל-x86 + x64). פתרון נוסף לבעיה זו הוצג בגרסה 4 של  והציע אפשרות לריצה תחת תת-קבוצה של רכיבי מערכת המכונה Client Profile. ריצה בפרופיל זה מוגבלת לשימוש בספריות התשתית הנפוצות באפליקציות לקוח ובכך מאפשרת הקטנה של נפח קובצי ספריות ההרצה שהמשתמש מחויב להתקין.
* בעוד שטבעם של התקנים שמרכיבים את ה- להיות חוצי פלטפורמות, יישום מלא של  נתמך רק על Windows. מיקרוסופט מספקת תמיכה מוגבלת עבור פלטפורמות אחרות כגון XNA עבור Xbox 360 ועבור Windows Phone 7, Silverlight, ו-Mac OS X. קיימים מימושים חלופיים של CLR, ספריות מחלקת בסיס ומהדרים (לפעמים של ספקים אחרים), אך בזמן שכל המימושים הללו מבוססים על אותם תקנים, הם עדיין מימושים שונים עם רמות שונות של שלמות, בהשוואה לגרסה המלאה של ה- המשווקת בידי מיקרוסופט.

## מהדרים
ב-2 באפריל 2014 מיקרוסופט הוציאה לאור גרסת בטא למהדר חדש בשם DotNET Native, המאפשר להדר קוד בשפת #C ו-VB.NET לקוד מכונה באופן ישיר (Native Code), ללא שימוש ב-JIT (מהדר דינמי – Just-In-Time Compiler). לפי מיקרוסופט, מהדר זה מתבסס על המהדר של ויז'ואל סטודיו לשפת ++C, והוא מהדר סטטי. מהדר זה מיועד ליישומי Windows Store בלבד (יישומים למחשבי לוח של מיקרוסופט), אך לפי מיקרוסופט, בעתיד המהדר יתמוך גם ביישומי "חלונות" למחשבים נייחים (Desktop Applications), אך הדבר לא התממש עד הרבעון הראשון של 2016.

היתרון הבולט במהדר זה הוא הביצועים – ניתן לכתוב קוד בשפת #C עם ביצועים דומים לקוד בשפת ++C, לפי מיקרוסופט. בנוסף לכך, מהדר זה מאפשר ל-#C לרוץ על מספר פלטפורמות שונות, ומקשה על פענוח לשפת המקור של הקובץ המהודר (Assembly Executable). יתרון נוסף הוא שאף על פי שהקוד הוא קוד מכונה, ניהול הזיכרון האוטומטי ושאר היתרונות של NET. עדיין מתאפשרים באופן מלא לחלוטין, בניגוד לשפות אחרות שמתהדרות לקוד מכונה (כדוגמת ++C). מהדר זה לא יחליף את מהדר ה-JIT, אך הוא יספק חלופה למהדר ה-JIT (ניתן לקבוע את סוג ההידור, JIT או Native, לפני ההידור).

## ניהול זיכרון
ניהול הזיכרון של שפות המפותחות בסביבה זו נעשה באופן אוטומטי בניגוד לתכנות בשפה כדוגמת ++C. ה-CLR מספק שירותים לטיפול בנושא של הקצאת זיכרון דינמית. אובייקטים שהוקצו אינם דורשים ניקוי ידני בתום השימוש ויש מערכת של "איסוף זבל" שדואגת לפנות זיכרון של אובייקטים שכבר אינם בשימוש.

## ראו גם
* .NET Core
* LINQ
* מונחים בתוכנה

## קישורים חיצוניים

* 

* דף הבית של הדוט נט
* השוואת גרסאות בין ASP.NET לבין ASP קלאסי
* מדריך ללימוד .NET ושפותיו, אתר DotnetHeaven
* הורדה של שפות פיתוח של הדוט נט – 2013, אתר מיקרוסופט
* סביבת פיתוח ברישוי קוד פתוח תואמת דוט נט, אתר SharpDevelop
* סביבת פיתוח דוט-נטית ומולטי פלטפורמית שרצה בסביבת לינוקס, חלונות ומק, אתר MonoDevelop
* מושג ברגע – סדרת סרטונים על מושגים ב- 
* סקירה של החידושים של .NET 4.6

## הערות שוליים

*
NET
NET
קטגוריה:תוכנות שהושקו ב-2002