DCSIMG
How do I get the current Project Template - שלמה גולדברג (הרב דוטנט)

שלמה גולדברג (הרב דוטנט)

מרצה בסלע ויועץ בעולם ה - net.

How do I get the current Project Template

לאחרונה ננתקלתי בבעייה מעניינת, כתבתי AddIn ל – Visual Studio, ונרשמתי לאירוע של הוספת פרוייקט, הקוד עד כאן הוא מאוד פשוט, צריך ליצור פרוייקט מסוג Visual Studio Add In ולעבור את כל ה – Wizard.

לאחר מכן במתודת OnConnection יש לכתוב את הקוד הבא:

public void OnConnection(object application, ext_ConnectMode connectMode, object addInInst, ref Array custom)

{

    _applicationObject = (DTE2)application;

    _addInInstance = (AddIn)addInInst;

 

    SolutionEvents events = _applicationObject.Events.SolutionEvents;

    events.ProjectAdded += SolutionEvents_ProjectAdded;

}

 

void SolutionEvents_ProjectAdded(Project Project)

{

    Debug.WriteLine(Project.FullName);

}

כעת בזמן יצירת פרוייקט, יכתב השם המלא של הפרוייקט לחלון ה – output.

מה שהייתי צריך זה לקבל את סוג הפרוייקט, (Console Application, Windows Service, WPF Appliction וכד’)

לאחר חקירה של כמה ימים (ולילות) התברר שאין שום מידע נורמלי שיאפשר לי לדעת את ה – Template Name של הפרוייקט שנוצר, הכי קרוב היה הפוסט הזה והזה אבל זה לא באמת עזר לי, מכיוון שמוצע שם להשתמש במאפיין בשם ProjectTypeGuids, שלא לכל הפרוייקטים זה קיים, למשל Windows Application, Windows Service נראים אותו דבר מבחינת ProjectType, OutputType.

בשלב הזה הבנתי שאני מחפש בצורה לא נכונה, התחלתי לחשוב הרי יש את ה – Add New Project Dialog שזוכר את סוג הפרוייקט שבחרתי, כלומר הם שומרים היכן שהוא את המידע, אז אמנם לצערי לא נוכל להוציא את המידע מהאובייקט Project, אבל לפחות נוכל לדעת מה סוג הפרוייקט.

התחלתי לחפש, ואז הגעתי ב – Registry למיקום הבא:

HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\NewProjectDialog

יש לו SubKey בשם LastUsedTemplateNameProject, ובנוסף גם SubKey בשם MRUSettingsRecentlyUsedTemplates שמכיל את המיקום הפיזי של ה – template.

מסתבר שכדי לקרוא ערכים של ה – Registry עבור Visual Studio לא צריך לעבוד קשה בכלל.

הקוד יראה כך:

void SolutionEvents_ProjectAdded(Project Project)

{

    // Add reference to Microsoft.VisualStudio.Shell.11.0.dll

    // Add reference to Microsoft.VisualStudio.OLE.Interop

 

    var settings = new ShellSettingsManager(ServiceProvider.GlobalProvider);

    var store = settings.GetReadOnlySettingsStore(SettingsScope.UserSettings);

 

    string name = store.GetString("NewProjectDialog", "LastUsedTemplateNameProject");

 

    string path = store.GetString("NewProjectDialog\\MRUSettingsRecentlyUsedTemplates", "Value0");

}

 

כעת נקבל את ה – TemplateName ואת ה – TemplatePath עבור הפרוייקט האחרון שנוצר.

תוכן התגובה

שלמה גולדברג (הרב דוטנט) כתב/ה:

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

# November 3, 2012 11:35 PM

שלמה גולדברג (הרב דוטנט) כתב/ה:

היות שלאחרונה אני כותב פוסטים בנושא “פיתוח תוספות ל – Visual Studio הציע פיני שארכז פוסט עם הלינקים כדי

# December 28, 2012 3:46 AM
שלח תגובה

(שדה חובה)  

(שדה חובה)  

(אופציונלי)

(שדה חובה) 

Please add 4 and 2 and type the answer here:


Enter the numbers above: