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

June 20, 2008

כפי שאתם יודעים, אחד מהחידושים של 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 וכמה מסקנות אישיות.

Add comment
facebook linkedin twitter email

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

one comment

  1. Alex GoleshJune 20, 2008 ב 9:54 pm

    I’ve blogged about this about 6 months ago… See my blog for sample (http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2007/12/20/how-to-compile-c-3-0-code-dynamically.aspx), or contact me if you need help with dynamic code generation/compilation.

    Cheers,
    Alex

    Reply