PracticU

יצירת DLL - חלק 2

בלי כתוביותעם כתוביות
PracticU › קורס תכנות מתקדם - #Advanced .NET C › יצירת DLL - חלק 2
מילון מושגים:
DLL - קובץ ספרייה ב-Windows המכיל קוד ופונקציות שתוכנות שונות יכולות לטעון ולהשתמש בהן במשותף.
Namespace - מרחב שמות שמקבץ שמות של טיפוסים ורכיבים ומונע התנגשות בין שמות זהים בחלקים שונים של הקוד.
כפתור - רכיב בממשק המשתמש שהמשתמש לוחץ עליו כדי להפעיל פעולה, כמו שליחת טופס או מעבר לדף אחר.
פריימוורק - מסגרת תוכנה שמספקת מבנה וכלים מוכנים לפיתוח יישומים, כדי לחסוך כתיבת קוד חוזר.
מפתח ציבורי - המפתח הגלוי בהצפנה אסימטרית, שאפשר לחלוק עם כולם, ומשמש להצפנה או לאימות חתימה.
חתימה דיגיטלית - מנגנון מבוסס הצפנה שמוכיח את מקור המידע ושלא שונה בדרך, בעזרת המפתח הפרטי של החותם.
Visual Studio - סביבת פיתוח משולבת (IDE) של מיקרוסופט לכתיבה, ניפוי והרצה של קוד, בעיקר בשפות .NET.
.NET - פלטפורמת פיתוח של מיקרוסופט להרצת יישומים בשפות כמו C#, הכוללת ספריות וסביבת ריצה משותפות.

יצירת DLL - חלק 2
בשיעור הזה משתמשים ב-DLL מפרויקט הרצה באותו פתרון, בודקים מה קורה כשה-DLL לא נמצא ליד קובץ ההרצה, ומכירים את הדרך להתקין DLL בתיקיית ה-GAC עם שם חתום וגרסה.
השלבים העיקריים
1. הפניה ל-DLL באותו פתרון: אחרי הוספת הפניה לפרויקט ה-DLL אפשר להשתמש במחלקות שבו בלי להוסיף using, כי ה-namespace הוא שלנו. לא מגדירים פרויקט DLL כפרויקט הפעלה, כי הוא לא ניתן להרצה ישירה. מגדירים את פרויקט ההרצה כ-Startup Project.
2. דיבוג בין הפרויקטים: כשהפרויקטים נמצאים באותו פתרון, אפשר להיכנס בדיבוג מהפרויקט הראשי אל תוך קוד ה-DLL ולעקוב אחרי הריצה.
3. שינוי שם משפיע על הכל: שינוי שם מחלקה ב-DLL מתעדכן אוטומטית בכל הפרויקטים שמשתמשים בו בתוך הפתרון.
4. הרצה מחוץ לסביבת הפיתוח: קובץ ההרצה מופעל לבד בלחיצה כפולה. אם התוכנית לא מחכה לקלט בסוף, החלון נסגר מיד, ולכן בשיעור מוסיפים ReadLine בסוף.
5. DLL ליד קובץ ההרצה: כשמעתיקים את קובץ ההרצה ואת ה-DLL לתיקייה אחרת והם יחד, התוכנית עובדת. בלי ה-DLL התוכנית קורסת עם FileNotFoundException, ורק כשמגיעים לשורה שמשתמשת בו. לכן DLL נטען דינמית, ושגיאה כזאת עשויה להופיע רק בכפתור מסוים באפליקציה.
6. תיקיות משנה: אפשר להגדיר בקובץ app.config תיקיית משנה שבה נמצא ה-DLL, אבל זה נדיר ולא נהוג.
7. תיקיית GAC: Global Assembly Cache היא תיקייה משותפת במחשב שבה נמצאים ה-DLL-ים של הפריימוורק, ושאליה אפשר להתקין DLL של מתכנת. התקנה כזאת דורשת שם, גרסה ומפתח ציבורי, כלומר חתימה דיגיטלית בשם אסמבלי חתום (strong name).
8. חתימה: בלשונית Signing בוחרים קובץ מפתח עם סיסמה. הקובץ הזה מייחד את החברה או המוצר, ולכן יש לשמור אותו מוגן ולא לשתף אותו.
9. מספר גרסה: אפשר להגדיר AssemblyVersion ידנית. שינוי קטן מעלה את המספר הימני, שינוי גדול מעלה את המספר השמאלי. כוכבית במקום מספר מאפשרת עליה אוטומטית בכל בנייה.
10. התקנה ושחרור בכלי gacutil: הפקודה gacutil /i מתקינה DLL, gacutil /u מסירה אותו, ו-gacutil /l מציגה את התוכן. ההתקנה נעשית מתוך Visual Studio Command Prompt, שמכיר את כלי .NET.
בסיום השיעור ברור ש-DLL נטען מתיקיית ההרצה או מה-GAC, ושהתקנה בתיקיית GAC דורשת שם חתום וגרסה.
השיעור הבא בקורס: יצירת DLL - חלק 3

פרקי ההרצאה: יצירת DLL - חלק 2

  1. 00:00

    הוספת ה-DLL ל-References ושימוש ב-Person

  2. 02:11

    למה פרויקט DLL לא יכול לרוץ

  3. 03:45

    Debugging של ה-DLL בסביבת הפיתוח

  4. 05:03

    Renaming שמשפיע על כל הפרויקטים

  5. 09:59

    הפצת ה-EXE וה-DLL ללקוח

  6. 10:58

    קריסה כש-DLL חסר - FileNotFoundException

  7. 13:49

    טעינה דינמית רק כשהפונקצייה נקראת

  8. 18:19

    תיקיית ה-GAC ו-DLL של ה-Framework

תמלול ההרצאה: יצירת DLL - חלק 2

הטקסט המלא של הדקות הראשונות בהרצאה «יצירת DLL - חלק 2» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:07

    אנחנו רוצים לבחור project, ה-DLL הזה נמצא בתוך סביבת הפיתוח שלי. אז הנה ה-DLL, Business Entities Library, נבצע אוקיי, ונראה שהוא מתווסף ל-references של הפרויקט שלי.

  2. 00:25

    ברגע שזה קרה, אני יכול להשתמש in person. הנה אני מגלה אותה באינטלי סנס, ואני אפילו לא צריך להגדיר את ה-using שלה פה למעלה, מפני שזה DLL שלי. בניתי אותו לכן השתמשתי באותו name space שהוא שלי וכך אני יכול להשתמש עם אותו אותה מחלקה בלי להתחיל להגדיר name spaces שונים הרי אני אישית לא הולך לכתוב פעמיים person במערכת שאני בונה אז למה שזה לא יהיה אותו שם של name space בכל המערכות שלי אז הנה

  3. 01:00

    יש לנו פה person p שווה new person ויש לנו פה אפשרות להגדיר איזשהו שם ניקח כאן את ג'ון סמית' מציג, מבצע אמפלואי, ניקח הפעם את מוישה כהן, איזושהי משכורת, פיס.

  4. 01:34

    ועכשיו אנחנו רוצים לבדוק שהפרויקט אכן עובד, כאשר אנחנו בעצם רוצים להריץ את הפרויקט. עכשיו שימו לב שיש לנו פה את ה-solution ובתוכו שני פרויקטים, ואם אני אנסה עכשיו להריץ את הפרויקט, איזה פרויקט בדיוק אמור לרוץ?

  5. 01:52

    מה שהולך לרוץ זה הפרויקט שמושחר שמודגש בולד ובגלל שהוספנו את הביזנס אנטיטיז ליברירי כפרויקט ראשון אז אוטומטית ויז'ואל סטודיו גרמה לו להיות בולד.

  6. 02:08

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

  7. 02:30

    אם אני עכשיו בוויז'ל סטודיו אנסה לבצע את אותו הדבר ולהריץ אותו, אני אחטוף שגיאה מבחינת ויז'ל סטודיו שהיא שגיאה דומה, והוא כותב לי, a project with an output type of class library cannot be started directly.

  8. 02:42

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

  9. 03:11

    פרויקט האקסקיושן ו-set as סטארט-אפ פרוג'קט שימו לב שהוא הופך להיות מושחר וכעת נריץ וקובץ האקסקיושן רץ ויש לנו הצגה של הנתונים נעשה דבר כזה ונראה את שתי השורות של הפרסון ושל האמפלואי והצלחנו להריץ את קובץ האקסקיושן על ידי שימוש ב-dl חיצוני מה קורה אם אנחנו רוצים לבצע די-באגינג

  10. 03:46

    נשים פה ברייק פוינט, נריץ את זה על ידי F5 ונראה אם אנחנו מסוגלים לדבק DLL. אנחנו כרגע נמצאים בקריאה לקונסטרקטור, בואו ניכנס F11 ונראה משהו מאוד מגניב.

  11. 04:03

    בגלל שגם ה-DLL וגם קובץ ה-Execution שניהם נמצאים באותה סביבת פיתוח בוויז'ואל סטודיו ושניהם ניתנים לצפייה על ידי חלונית ה-Solution Explorer, אז הדיבאגר עובד בו פרפקט ויש לנו כניסה מפרויקט א' לתוך פרויקט ב', אין שום בעיה לעשות את זה, אנחנו יכולים להמשיך ולרוץ ובצורה כזאת לדבג

  12. 04:31

    את הפעילות של ה-DLL שלנו, אבל זה קורה רק אם שניהם נמצאים באותו ה-Solution, באותה סביבת פיתוח Visual Studio. יש כל מיני כלים שמאפשרים לדבג אם הפרויקט הזה נמצא במקום אחר, אם אני לא באותו dll לא ניכנס ל remote debugging כרגע ואנחנו רואים שזה הצליח perfect.

  13. 04:56

    יתרון נוסף שיש בזה שהdll שלנו והexecution שלנו שניהם נמצאים תחת אותה סביבת פיתוח זה שינוי שמות. אם אני הולך לאיזשהו שם נניח לאמפלואי ומחליט רגע השם אמפלואי זה לא שם טוב לי אני רוצה לשנות את זה לוורקר בואו נלך אפילו לקובץ ונגיד זה וורקר ולא אמפלואי, כאשר אתם עושים Enter, אז הוא שואל אתכם האם אתם רוצים גם to

  14. 05:25

    rename the class. בואו נגיד לו כן. אנחנו רואים שהתבצע ה-renaming. הנה וורקר בקלאס, הנה הקונסטרקטור וורקר. אחלה.

  15. 05:37

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

  16. 05:53

    כי בפרויקטים גדולים אתם בטח תיתקלו בהרבה מצבים שאתם עושים רי-ניימינג ואז הוא מבצע לי את הרי-ניימינג אוטומטית בכל מקום שהשתמשתי ב-DLL, אני לא צריך לדאוג לזה, זה עובד מעולה.

  17. 06:07

    עכשיו, כל מה שעשינו נראה בסדר גמור ועובד כמו שצריך ומה שאני רוצה לעשות, אני רוצה לבדוק את כל הסיפור הזה אבל מחוץ לוויז'ואל סטודיו. לצורך הדוגמה, אני רוצה לרשום פה דבר כזה Hello, press a key to continue and create person and employee objects console readline ופה בסוף אני רושם end of main console

  18. 06:50

    readline למה אני רוצה לעצור עם console readline בסוף כי כאשר אני מריץ את קובץ ה-execution הזה מחוץ ל-visual סטודיו אם אין לנו קונסול רידליין אז ספציפית קונסול אפליקיישן נסגר אוטומטית.

  19. 07:05

    כאשר אנחנו מריצים את זה בתוך ויז'ל סטודיו תמיד אתם רואים בסוף שהוא עוצר ונותן לנו לראות את התוכנית עצמה לפני שהוא נסגר אבל זה לא המצב אם אנחנו מריצים את האקסקיושן מבחוץ.

  20. 07:19

    אז אני רוצה כרגע לבצע ניקוי של הכל אני רוצה לבצע ריבילד סלושן בכדי שבוודאות נדע שמה שכתבתי עכשיו נכנס לתוקף. אני רוצה להריץ את זה פעם אחת מתוך Visual Studio.

  21. 07:36

    אנחנו רואים כרגע Hello, Press a key to continue and create personal employee objects. אני עוצר, אני לוחץ Enter. הנה האלמנטים נוצרו, הנה End of Main ועכשיו נסגרת התוכנית.

  22. 07:50

    מה שאני רוצה לעשות עכשיו זה לגשת ולראות מה יש לנו בתוך התיקיות שיצרנו. ואנחנו רואים שיש לנו פה את תיקיית ה-Solution כמו שצריך, מכילה את קובץ ה-SLN, קובץ ה-SUO, שני פרויקטים, כל אחד בתיקייה נפרדת.

  23. 08:11

    ב-DLL יש לנו בתוך בין דיבאג את קובץ ה-DLL בלבד, אין לנו פה אקסקיושן כמובן. קובץ PDB זה קובץ שנקרא Project Debug והוא מכיל נתונים לגבי דיבאגינג, לדוגמה באיזה מקומות ב-DLL הגדרתי breakpoints וכולי, אין לו משמעות בצורה טבעית או בצורה פלאסית כאשר אנחנו מפיצים תוכנית ללקוח שלנו,

  24. 08:43

    אלא אם כן אנחנו רוצים לבצע remote debugging ולדבק את זה מרחוק. אבל מה שיותר מעניין אותי זה מה קרה בתוך קובץ ה-execution.

  25. 08:54

    ומה שקרה בתוך קובץ ה-execution זה שיש לנו פה את פרויקט ה-EXE, קובץ ה-exe ליתר דיוק השם שלו זה myconsoleapp.exe שימו לב שיש עוד קובץ אקסקיושן אבל הוא נקרא vshost.exe והקובץ הזה זה לא קובץ של הפרויקט שלנו שאנחנו בנינו אלא קובץ של ויז'ואל סטודיו שמשמש בשביל להריץ את קובץ האקסקיושן שלנו

  26. 09:27

    מתוך ויז'ואל סטודיו אז אנחנו לא צריכים אותו בשביל הלקוח. יש לנו פה את ה-PDB, סבבה, אבל יש לנו את ה-DLL. ואנחנו רואים שברגע שצירפנו קובץ DLL לתוך קובץ ה-Execution שלנו על ידי Visual Studio, אוטומטית ה-DLL מגיע ליד קובץ ה-Execution.

  27. 09:53

    אם עכשיו אני רוצה להריץ את שניהם במחשב הלקוח שלי, בסופו של דבר אני רוצה לתת את התוכנה הזאת ללקוח, כל מה שאני צריך זה רק את ה-Exe ואת ה-DLL בלבד.

  28. 10:04

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

  29. 10:27

    נדביק, ויש לנו את הקונסול ואת ה-DLL side by side אחד ליד השני בתיקייה נפרדת, ונניח שזה מה שהבאתי ללקוח שלי. דאבל קליק על קובץ ה-execution, רץ, הוא אומר לי, Hello, Press the key to continue, בלה בלה, בואו נלחץ אוקיי, והכל עובד כמו שצריך.

  30. 10:48

    כעת, בואו נלך ל-DLL ונשנה את שמו. ושוב פעם, נלחץ, נריץ את קובץ ה-Execution, דאבל קליק עליו, והוא קורס. אז מה בעצם קרה כאן? פונקציית המיין באה ואומרת, אני בשביל לרוץ חייבת לבדוק מה בדיוק קיים בתוך הפונקציה, ופונקציית המיין רואה שיש לנו שימוש בפרסון ובוורקר והם נמצאים ב-DLL חיצוני אבל אין לנו גישה

  31. 11:30

    ל-DLL החיצוני והיא לא מוצאת אותו ולכן זה נקרא Dynamic Link Library כי ברגע שהתוכנית מנסה להשתמש עם הרכיבים האלה ולא מצליחה למצוא אותם אז היא בעצם גורמת לקריסה אני לא זוכר אם הוא הראה לי בדיוק מה הקריסה אבל זה אמור להיות File Not Found Exception.

  32. 11:51

    הוא לא מראה לי את זה, אבל זה בעצם File Not Found Exception, כי וואלה, הוא לא מצא את הרכיבים עצמם. בואו ננסה לעשות אפילו משהו אחר. נוציא את הכל לפונקציה חיצונית.

  33. 12:07

    מקש ימני, Refactor, Extract Method, Test DLL, ואנחנו רוצים לעשות אפילו Try Catch. בואו נעשה כזה דבר את זה, נכתוב פה. אולי נגלה, זה יהיה ב-end of main.

  34. 12:50

    אנחנו רוצים לבצע Clean, אנחנו רוצים לבצע Rebuild, זה אומר לי בוודאות שהשינויים שהכנסתי יהיו שמה. אנחנו רוצים לגשת לקובץ Execution, Bind, דיבאג, הנה ה-Consol Application, הנה ה-DLL המעודכן, ואנחנו רוצים למחוק את מה שהיה ולשים את התוכנית

  35. 13:23

    הזאת, Paste. וקודם כל להריץ ולראות שזה עובד כמו שצריך, דאבל קליק, פרס אני קי, הכל עובד כמו שצריך, נשנה את השם של ה-DLL, נריץ.

  36. 13:40

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

  37. 13:53

    למה? כי עוד לא הגעתי לפונקציה שמשתמשת ב-DLL. זאת הסיבה שזה נקרא Dynamic Link Library. רק אם אתם מגיעים לפונקציה שאכן משתמשת בהרכיבים שנמצאים ב-DLL, רק אז .NET ניגשת, מחפשת את ה-DLL וטוענת אותו.

  38. 14:08

    וזאת נקודה חשובה, כי יכול להיות שאין לי את ה-DLL, יוזר עובד עובד עובד עובד עם האפליקציה, שהיא בוא נניח Windows Forms Application עם חלונות וכולי, ובאיזשהו כפתור מרוחק יש לי שימוש ב-DLL ובעצם אין לי את ה-DLL שם.

  39. 14:24

    זה כמובן באג וזה לא אופטימלי, אבל רק כשהיוזר ילחץ על הכפתור הזה, פתאום המערכת תקרוס ותגיד לו שאין את ה-DLL. אז בואו נלחץ עכשיו על Enter, יש לנו פה קריסה.

  40. 14:39

    אפילו הוא לא הצליח אפילו לתפוס את הקריסה הזאת ב-catch, מפני שהוא קרס על קטע של DLL. אז ברגע שהוא לא מצא את ה-DLL הזה, אפילו הוא לא הצליח, כי זה לא קטע של מצב שבו יש לי באג לוגי שגרם לקריסה, אלא .NET עצמה לפני ההפעלה של הפונקציה בכלל, ניסתה למצוא את ה-DLL הזה ולא הצליחה.

  41. 15:05

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

  42. 15:37

    אנחנו נאלצים לבצע את כל הסיפור הזה ואנחנו צריכים לגשת ולהעתיק שוב פעם את האקסקיושן וה-DLL המעודכן. אנחנו צריכים לגשת להדביק אותם פה בתיקייה הנפרדת לגמרי כי אני לא רוצה להיות קשור לתיקייה הקודמת.

  43. 16:06

    דאבל קליק על קובץ האקסקיושן הכל פועל כמו שצריך. נשנה את השם של ה-DLL, דאבל קליק על קובץ האקסקיושן, אנטר או אם אנחנו עוטפים את הפונקציה אז בעצם אנחנו רואים מה הייתה הבעיה כונת לואוד פייל או אסמבלי ביזנס אנטיטיז ליב ורז'ן ועוד כל מיני פרמטרים שיש אנחנו יכולים לדבר עליו או one of its dependencies כלומר יכול

  44. 16:33

    להיות שהdll הזה משתמש בdll אחר והוא לא יצטרך לטעון את הdll האחר the system cannot find the file specified בפיילדר גמור הדבר הזה זה פייל נוט פאונד אקספצ'ן ואנחנו מבינים בייסיקלי מה קרה וזה אומר שאם אנחנו רוצים להשתמש עם dll אז ה dll חייב להיות ליד קובץ האקסקיושן בדיוק איפה שקובץ האקסקיושן שמה נמצא ה dll

  45. 17:07

    אם המצב הזה קיים הכל בסדר אם היינו גם מוחקים את ה dll הזה מפה כמובן שהיינו מקבלים את אותה שגיאה בדיוק בסדר אבל אבל ה-DLL יכול להיות בעוד כל מיני מקומות אחרים.

  46. 17:24

    מקום אחד שה-DLL יכול להיות בו זה תת-תיקייה שקיימת ליד קובץ האקסקיושן, אבל רק אם אנחנו אומרים את זה בצורה מפורשת בקובץ קונפיגורציה, לדוגמה, app-config שקיים לנו.

  47. 17:43

    הדבר הזה הוא די נדיר, אני לא מצאתי סיבה עד היום למה להגדיר תתי-תיקיות ובתוכם לשים את ה-DLLים, אבל רק תדעו שזה ניתן לביצוע, מי שרוצה שיחפש בגוגל איך עושים את זה, מה אנחנו צריכים לכתוב בתוך קובץ האפ קונפיג של האפליקציה שלנו בשביל לומר לה, תקשיבי, קיימת איזושהי

  48. 18:03

    תת-תיקייה ובתוכה יש את ה-DLL. זה לא משהו שהוא טבעי לוויז'ל סטודיו ולכן אני לא נוהג לבצע את זה, אבל רק תדעו שהדבר הזה קיים, די נדיר בכלל שמישהו יעשה דבר כזה.

  49. 18:16

    אז ראינו קודם כל שהדבר הראשון שניתן לביצוע זה שה-DLL נמצא ליד קובץ Execution. אבל אני רוצה לדבר על עוד משהו שמאוד חשוב להבין, והוא גם יכול להיות נפוץ.

  50. 18:30

    ומה שקורה זה שקיימת תיקייה מיוחדת במחשב, וזאת התיקייה שהותקנה ביחד עם הפריימורק, שגם שם אנחנו יכולים להגדיר DLL. איפה התיקייה הזאת נמצאת?

  51. 18:43

    אם אנחנו ניכנס לאונן C, תיקיית Windows, אנחנו יכולים לראות שיש פה פקיעה שנקראת אסמבלי, נמצאת פה.

  52. 18:58

    בתוך Windows אסמבלי קיימים כל ה-DLLים שהותקנו בפריימורק של .NET, מספר 2-0 אם אני לא טועה, אולי גם 3, תכף נראה.

  53. 19:14

    בואו נראה איזה פריימורקס יש פה, הוא לא מראה לי את הפריימורקס. אז אנחנו רואים שיש פה המון המון המון DLLים .NETים.

  54. 19:23

    לדוגמה, אם עד היום השתמשתם לדוגמה בסיסטם Windows Forms, אז אנחנו יכולים לראות שסיסטם Windows Forms זה בעצם איזשהו DLL. איפה אנחנו נמצא אותו עכשיו?

  55. 19:40

    סיסטם Windows, אין לי אותו פה. מאיזושהי סיבה, אולי נמיין את זה. אני לא רואה אותו פה, תכף נראה איפה הוא נמצא במקום אחר, כי יש פה כמה תיקיות כאלה.

  56. 19:57

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

  57. 20:32

    פורמס גרסת 2.0 אנחנו רואים פה גם שיש גרסאות של 3.5 אבל אנחנו די לא רואים גרסה של framework 4.0, או פה אנחנו רואים אחד שנכתב ספציפית.

  58. 20:46

    אבל זה לא הדיפולט. זאת אומרת, יש לנו כאן את התיקייה הזאתי ש-DLLים של .NET, שהותקנו ביחד עם ה-framework של .NET, שמכילים את התשתית של .NET, נמצאים כאן.

  59. 21:02

    אבל יש פה עוד כמה תיקיות כאלה. אם אנחנו הולכים ל-Windows, Microsoft.NET, ובתוך Microsoft.NET אנחנו פונים לאסמבלי, אנחנו רואים שגם כאן יש את התיקייה הזאת שנקראת MSIL, שגם כאן יש הרבה הרבה הרבה תיקיות שבתוכן יש DLLים.

  60. 21:24

    מי, אם אני לא טועה, פריימוורק 4.0 התחילו לכתוב DLLים בתוך התיקייה הזאת. התיקייה הזאת והתיקייה הקודמת נקראת GAC. GAC זה קיצור של Global Assembly Cache. זאת אומרת שזאת התיקייה ש.NET שותלת בה את הדיאללים שלה, דיאללים התשתיתיים שמגיעים אוטומטית עם דוטנט.

  61. 21:48

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

  62. 22:08

    לדוגמה, אנחנו לא צריכים ללכת ולכתוב את המחלקה פורום, אנחנו יכולים לרשת אותה ולכתוב פורום בעצמנו. איך זה יכול להיות? כי המחלקה פורום היא חלק מהתשתית של דוטנט, וראינו בדיוק באיזה DLL היא נמצאת.

  63. 22:21

    והנקודה היא שכאשר אנחנו משתמשים ב-DLL, אז קובץ ה-execution שלנו קודם כל יחפש את ה-DLL האם הוא נמצא לידו, אבל אם הוא לא נמצא לידו הוא ילך ויחפש אותו האם הוא נמצא בגק.

  64. 22:40

    ואנחנו רוצים לראות כיצד אנחנו יכולים להתקין DLL בתוך הגק. האם מספיק שפשוט ניקח את ה-DLL ונזרוק אותו לגג והוא יעבוד?

  65. 22:50

    התשובה היא לא, ובואו נבין למה לא ואיך עושים את זה. בואו נסתכל רגע על הגג של framework 2 ואז

לקורס המלא: קורס תכנות מתקדם ב‑#C ודוט-נט

ההרצאה הקודמת: יצירת DLL - חלק 1

ההרצאה הבאה: יצירת DLL - חלק 3

הרצאות קשורות מקורסים אחרים

  • חטיפת DLL עם Sysmon
  • עבודה עם מספר פרויקטים - Multiple Projects - DLL

קורסים נוספים במסלול

  • קורס WinForms - תוכנות רגילות בווינדוס
  • פרויקט מעשי ב-#C - בונים מחשבון פשוט
  • פרויקט מעשי ב-#C - ספר טלפונים
  • פרויקט מעשי ב-#C - תוכנת צייר
  • קורס ADO.NET - חיבור אתר למסד נתונים
  • קורס WCF - תקשורת למתקדמים בדוט-נט