Strong Number

gilad g

New member
הממממ

1. לא הבנתי את השאלה. 1.1. זה באמת מה שיקרה
2. אתה מתכוון אילו ערכים לשמור ב-ViewState
כל מקרה לגופו.. מכוון שאני לא מכיר את הפקד/דף שאתה בונה, אני לא יכול לדעת על מה אתה מדבר. 3. לא. המטרה של Serialization היא שמירה של מחלקות שלמות באופן בינארי/XML/וכו'.
 

Afik17

New member
הבהרות (שיער) :

1. אם בקובץ ה aspx אני מגדיר קונטרול *צד שרת* המכיל רשימת ערכים, ובתוך ה aspx עצמו (לא aspx.cs) אני גם מגדיר את הערכים שהוא מכיל (נניח שהם קבועים), אז למרות ש EnableViewState=false, לאחר ה PostBack אראה שוב את כל הערכים. נכון ? 2. האם זה יהיה נכון לומר שכל הצמדת נתונים לפקד, המתבצעת דרך קוד צד שרת (ניח שלפה מ DB, אכלוס דינאמי של מערך המוצמד לפקד רשימת ערכים וכו'), מחייבת EnableViewState=true אם רוצים להנתונים ימשיכו להיות מוצגים בין PostBack ל PostBack ? 3. אם המטרה של Serialization היא שמירת מחלקות שלמות באופן בינארי/XML אז השימוש ב Serialization בהקשר של ViewState הוא שימוש נוסף ליכולת Serialize, או שזה בעצם אותו דבר ואני מפספס משהו ? 4. מה הכוונה "המטרה של Serialization היא שמירה של מחלקות שלמות באופן בינארי/XML/וכו'" ? אתה מתכוון שמירת המחלקה על הדיסק הקשיח (בפורמט כלשהו - XML למשל) לצורך שימוש עתידי ?
 

gilad g

New member
...

1. נכון. 2. כן. קצת חבל על השאלות - לא יכולת לבדוק בעצמך?
3. לא הבנתי. מה הכוונה ב"יכולות נוספות"? ViewState עושה Serialize לנתונים (בטח הוא שומר אותם ב-HashTable - לכן הוא עושה Serialization ל-HashTable), ושולח את התוצאה ללקוח. 4. כן.
 

gooshi

New member
קודם כל

זה לא Strong Number כי אם Strong Name. התוכנה sn.exe , בסך הכל קובעת לך "שם חזק" דהיינו שם שכולם יכירו ולא ידרס על ידי DLL אחר, אשר מתאר את הקומפוננטה שלך על תכולתה וגרסתה. המרכיבים של שם זה נגזרים משם ה Assembly שלך, הגרסה שלו וה Culture שלו. התוכנה הנ"ל מייצרת לך קובץ מסוג snk אשר מגדיר את "שם" האפליקציה באופן חד ערכי. כאשר רוצים לבצע Refernce ל DLL ב NET. נהוג לשים אותו ב BIN של האפליקצייה ואז לעשות לו Reference. זה יכול לגרום לכך שיהיו לך באותה מכונה מספר קומפוננטות שונות שלכל אחת מהן השם : MyComponent.dll או לחילופין מספר גרסאות שונות של אותו DLL. באופן דומה אבל שונה, ניתן לשים DLL כזה ב Global Assembly Cache דהיינו ה GAC , ואז "כולם" מכירים את ה DLL הזה בשמו ולא יתכן קונפליקט של שמות דומים לרכיבים שונים. כך ניתן לוודא באופן ודאי שאכן האפליקציה שלך עובדת מול ה DLL שהיא התכוונה לעבוד. לשם כך חובה ליצור לו Strong Name לפני הוספתו ל GAC. זה בעברית פשוטה ועל קצה המזלג.
 

Afik17

New member
Mission (Im)possible !

אם הבנתי נכון, המטרה של sn.exe הוא לייצר שם ייחודי לאסמבלי שלי. אני מכיר את נושא ה GAC - בסך הכל תיקיה שבה מאחסנים DLL שרוצים שיהיו משותפים לכולם. אתה אומר בעצם שע"מ להכניס DLL ל GAC (ע"י gacutil אם אינני טועה (?)), אני חייב לספק Strong Name ע"מ להכניסו ל GAC ? אם כן, מדוע ? אולי אני לא רוצה לנהל גירסאות ל DLL ?
 

gilad g

New member
כן

ואתה חייב לנהל גרסאות, אחרת יהיו התנגשויות. לכמעט כל DLL יוצאת גרסה שניה. ההכרח הזה של סיפוק SN בא למנוע את ה-DLL Hell שהיה נפוץ כל כך בסביבת Windows DNA.
 

Afik17

New member
כיצד בדיוק עובד ניהול הגרסאות ?

נניח כתבתי DLL, יצרתי עבורו SN, והכנסתי אותו ל GAC. כעת שיניתי קצת את ה DLL. 1. כיצד אני מכניס את הגירסה החדשה ל GAC, בלי שהיא תדרוס את הישנה 2. כאשר אני פונה ל DLL מתוך תוכנית, כיצד הוא יודע לאיזו גירסא לפנות ?
 

gooshi

New member
תשנה בקובץ...

ה ASSEBLY את ה VERSION שלו למשל. אח"כ תקמפל ותעשה לו SN מחדש, אותו תכניס ל GAC. באפליקצייה תצטרך לפרט מול מי אתה עובד לפי ה REFERNCE שלך היא תדע עם איזה גרסה לעבוד, פשוט לכל אחד יהיה SN אחר ואז אין לך בעיה.
 

nattygur

New member
לידע כללי : הכיוון היום ב MS

לחייב שימוש ב SN עבור כל Assembly. יתחיל כנראה מ Whidbey.
 
למעלה