DCSIMG
June 2008 - Posts - Ido Flatow's Blog Veni Vidi Scripsi

Ido Flatow's Blog

Veni Vidi Scripsi

News

Have you heard me speak?
Powered
<style type='text/css' media='screen' id='sm_css'> #smix {overflow: visible;height: auto;border-radius: 10px;max-width: 250px;background-color: #323232;text-align: left;font-size: 12px;line-height: 16px;font-family:'Lucida Sans Unicode','Lucida Grande',Verdana,Arial,Helvetica,sans-serif;-webkit-border-radius: 10px;-moz-border-radius: 10px;border-radius: 10px;} #smix a {color: #0056CC;text-decoration: none;} #smix .sm_head {color: #fff; line-height: 1em;font-size: 1.4em;padding: 10px;color: #fff;} #smix .sm_lanyard_wrapper {background-color: #fff;;clear: both;width: 97%;margin: 0 auto;margin-bottom: 0px;} #smix .sm_lanyard_content {padding: 7px;}#smix button.sm_rec, #smix a.sm_rec, #smix input[type=submit].sm_rec { padding: 6px 10px; -webkit-border-radius: 2px 2px;-moz-border-radius: 2px; border-radius: 2px; border: solid 1px rgb(153, 153, 153); background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(255, 255, 255)), to(rgb(221, 221, 221))); color: #333; text-decoration: none; cursor: pointer; display: inline-block; text-align: center; text-shadow: 0px 1px 1px rgba(255,255,255,1); line-height: 1; }#smix .sm_rec:hover { background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(248, 248, 248)), to(rgb(221, 221, 221))); }#smix .sm_rec:active { background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(204, 204, 204)), to(rgb(221, 221, 221))); }#smix .sm_rec.medium { padding: 3px 7px; font-size: 13px; }#smix .sm_rec span.icon.thumbs_up {background-position: 0px 36px;vertical-align: text-top;display: inline-block;margin-right: 4px;height: 18px;width: 16px;background-image: url(http://speakermix.com/images/new/thumbsold.png);}#smix .sm_rec:hover span.icon.thumbs_up {background-position: 0px 18px;} #smix .sm_events {padding:2px 0px 4px 0px;} #smix .sm_section {font-size: 10px; border-bottom: 1px solid silver; margin-bottom: 6px;} #smix .sm_subline {font-size:120%;margin-top:4px;font-weight:bold} #smix .powered {text-align: right} #smix .powered img {margin: 7px} </style>
Sela Technology Center

Advertisement

June 2008 - Posts

קימפול קוד 3.0 #C תכנותית באמצעות CSharpCodeProvider

כפי שאתם יודעים, אחד מהחידושים של C# 3.0 הוא Partial Method שמאפשר לנו לכתוב מתודות Partial ולממשן (או שלא) בקובץ נפרד. אחד המקומות שמשתמשים לדוגמה ב-Partial Method הוא בקוד המחולל מסכמת EDMX של Ado.Net Entity Framework.

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

  1. בניית קובץ EDMX - הסבר בפוסטים הבאים
  2. בניית CS מתוך ה-EDMX (או ליתר דיוק, מתוך ה-CSDL שבתוכו). זאת ניתן לעשות באמצעות מחלקות ה-Designer של Entity Framework
  3. קימפול קובץ ה-CS שנוצר, באמצעות מחלקת CSharpCodeProvider.

ההמרה ל-CS עבדה, אבל הקמפול זרק שגיאות של invalid token void שאחרי בדיקה קצרה התברר שמדובר ב-Partial Methods שמופיעים בקובץ ה-CS. מתברר שברירת המחדל של CSharpCodeProvider היא לקמפל ל-2.0 ולא ל-3.5, אבל בירור קצר ב-MSDN העלה שניתן לספק ל-Constructor פרמטר Dictionary עם גרסת הקומפיילר.

מי שינסה לרשום את הקוד כפי שרשום ב-MSDN, שיצפה לקבל הודעת שגיאה אחרת (csc.exe not found), כי מתברר שיש טעות בתיעוד - לפי ה-MSDN יש להוסיף ל-Dictionary את המפתח CompilerVersion עם הערך המחרוזתי 3.5, אבל הערך הנכון הוא V3.5 (תוספת ה-V לפני המספר).

בפוסטים הבאים אני אראה קצת דוגמאות איך בונים דינאמית קבצי EDMX וכמה מסקנות אישיות.