
рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2012 рдХреЗ рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЙрдирдХреЙрд░реНрдб рдирд╛рдордХ рдПрдХ рдирдП рдХрд╕реНрдЯрдо рдбрд┐рдмрдЧрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рд╛рде рдерд╛ред рдЗрд╕рдХреА рдШрдЯрдХ рдкреНрд░рдгрд╛рд▓реА VSIX рдкреНрд▓рдЧ-рдЗрди рдХреЛ рдбрд┐рдмрдЧрд░ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдФрд░ рдирдП, рд╕рдВрджрд░реНрдн-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдЙрдкрдХрд░рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ рдЬреЛ рдбрд┐рдмрдЧрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдПрдкреАрдЖрдИ рдХрдИ QOL рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдкреНрд░рдмрдВрдзрд┐рдд / рдЕрдкреНрд░рдмрдВрдзрд┐рдд рдХреЛрдб рдХреЗ рдмреАрдЪ рдорд╛рд░реНрд╢рд▓рд┐рдВрдЧ, рдПрдХ рджреВрд░рд╕реНрде / рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдбрд┐рдмрдЧ рдХреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рдПрдХреАрдХрд░рдг, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рдЧрднрдЧ рд╕рднреА рдЪреАрдЬреЗрдВ рдЬреЛ рдЖрдИрдбреАрдИ рдореЗрдВ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХреЙрдирдХреЙрд░реНрдб рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ! рдордХреНрдЦреА рдкрд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЪрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓реЗрдВ, рдЕрдиреБрд░реЛрдз рдкрд░ рдХреЙрд▓ рдлрд╝рдВрдХреНрд╢рдВрд╕ (рдпрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЙрди рдкрд░ рдХреЙрд▓ рдЫреЛрдбрд╝реЗрдВ!), рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкреАрдбреАрдмреА (!), рдЪрд░рдг-рджрд░-рдЪрд░рдг рдмрд╛рдпрдкрд╛рд╕ рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХреЛрдб рд╕рдВрд╢реЛрдзрди рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬ рд╕рдХрддреЗ рд╣реИрдВ! рдмрд┐рд▓реНрд▓реА рдЦреЛрд▓реЗрдВ рдФрд░ рдЖрдк рд╕рд╛рдЗрдХрд┐рд▓ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдЗрди рдЕрд▓реНрдкрдЬреНрдЮрд╛рдд рдирд╡рд╛рдЪрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдиреЗрдВрдЧреЗред
рдЖрдкрдХреЛ рд╢реБрд░реВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдбреАрдмрдЧрд░
рдмрдирд╛рдо VSIXfig рдлрд╝рд╛рдЗрд▓ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкрдврд╝рдХрд░ рдШрдЯрдХреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИред рдмрджрд▓реЗ рдореЗрдВ,
vsdconfig рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд▓рдЧрдЗрди рдШрдЯрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреМрди рд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрди рдШрдЯрдХреЛрдВ рдХреЛ рдХреИрд╕реЗ рдЦреЛрдЬрдирд╛ рд╣реИ (рдПрдХ .dll рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ, рд╡рд░реНрдЧ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдпрд╛, рдореВрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, CLSID рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рдореИрдВ C # рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛)ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (GUID) рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЗрд╕рдХрд╛ "рд╕реНрддрд░" рднреАред рдПрдХ рд╕реНрддрд░ рд╡рд╣ рд╣реИ рдЬреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╕рд╛рде рд╣реА рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд┐рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ - рдЖрдИрдбреАрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдпрд╛ рдбреАрдмрдЧ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдХреБрдЫ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗрд╡рд▓ рдПрдХ рдЖрдИрдбреАрдИ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд - рдХреЗрд╡рд▓ рдПрдХ рдбреАрдмрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВред рдХреБрдЫ рдПрдкреАрдЖрдИ рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╡рд╣реАрдВ рдФрд░ рд╡рд╣реАрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рде рд╣реА, рдХрдИ рдШрдЯрдХреЛрдВ рдХреЗ рдЕрдкрдиреЗ рд▓реЗрдЖрдЙрдЯ рдирд┐рдпрдо рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдЕрдкрдиреЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрддрд░реЛрдВ рдкрд░ рд╕реНрдерд┐рдд рдореМрдЬреВрджрд╛ рдбрд┐рдмрдЧрд░ рддрддреНрд╡реЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдШрдЯрдирд╛рдУрдВ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЕрд▓рдЧ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдореЗрдВ RTFM (https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.debugger.componentinterfaces?view=visualstudiosdk-2017) рдФрд░ рд╕реНрд╡рддрдВрддреНрд░ рдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдЬреЛ рдПрдХ рджрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рдпрджрд┐ рдХреБрдЫ рд╣реЛрддрд╛ рд╣реИ рддреЛ рд╣рдЯрд╛рдПрдВ (рдпрд╣ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рдлрд┐рд░ рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде - рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рдпрд╛ рдкреНрд░рдХрд╛рд░ рд▓реЛрдб рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рдЕрднреА рднреА рдирд╣реАрдВ рдорд┐рд▓рд╛ рдХрд┐ рд▓реЙрдЧ рдХрд╣рд╛рдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЬрд┐рд╕реЗ рд▓рдХреНрд╖реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓реЛрдб рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗрдВрдЯ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддрд╛ рд╣реИ di-, рдпрд╛ рдирд╣реАрдВред akuratno рд░рд╣реЛ, рд▓рдЧрд╛рддрд╛рд░ рдкреНрд░рддрд┐рдмрджреНрдз рд▓реЗрддреЗ
рд╣реИрдВ, рдФрд░ рдкрд╣рд┐рдпрд╛ рдирд╢реЗ рдореЗрдВ рдкреАрдЫреЗ рдмреИрдардиреЗ рдирд╣реАрдВ рд╣реИ)редрд╕реНрддрд░реЛрдВ рдХреА рд╕реВрдЪреА рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ (рдореИрдВ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдкрд╛рда рджреВрдВрдЧрд╛ рддрд╛рдХрд┐ рдкрд╛рдардХ RFTM рдХреГрддреНрдпреЛрдВ рдХреЛ рдХрд░рддреЗ рд╕рдордп рдШрдЯрдирд╛рдПрдВ рди рд╣реЛрдВ):
рдЖрдИрдбреАрдИ рдШрдЯрдХ рд╕реНрддрд░ (рдорд╛рди> 100,000):
рд▓рдХреНрд╖реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдШрдЯрдХреЛрдВ рдХреЗ рд╕реНрддрд░ (рдорд╛рди <99.999):
рдЕрдЧрд▓рд╛, рдХреНрд░рдо рдореЗрдВ, рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдпрджрд┐ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рд░реАрдХрд┐рдпрд╛рдБ рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдореИрдВ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдпрд╛ рдЗрд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ - рд╣рдореЗрдВ рдХрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд┐рд░реНрднрд░рддрд╛рдПрдВ, рд╕рд╛рде рд╣реА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ VisualStudio рдХреЗ рд╕рд╛рде рд╡рд┐рддрд░рд┐рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрд▓рдмреНрдз рд╣реИ рдХреЗрд╡рд▓ рдирдЧреЗрдЯ рдХреЗ рд╕рд╛рдеред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЕрдм рд╣рдореЗрдВ рд╕рд╛рд░ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╕рдВрд░рдЪрд┐рдд рд╣реИ:
- рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЦреЛрд▓реЗрдВред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, 2017 рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг
- VSIX рдкреНрд░реЛрдЬреЗрдХреНрдЯ ( рд╡рд┐рдЬреБрдЕрд▓ C # -> рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд┐рд▓рд┐рдЯреА рдЯреИрдм, рдпрд╛ рдЦреЛрдЬ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ)ред рдЪрд▓реЛ рдЗрд╕реЗ "HelloVSIX" рдХрд╣рддреЗ рд╣реИрдВ
- рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдЬреЛрдбрд╝реЗрдВ, рдФрд░ рдЗрд╕реЗ "DebuggeePlugin" рдХрд╣реЗрдВ
- рд╣рдордиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ "DebuggeePlugin" рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ "HelloVSIX" рдХрд╛ рд╕рдВрджрд░реНрдн рджрд┐рдпрд╛ред
- рд╣рдордиреЗ рдЕрд╕реЗрдВрдмрд▓реА "Microsoft.VisualStudio.Debugger.Engine" рдХрд╛ рд╕рдВрджрд░реНрдн рдбрд┐рдмрдЧреНрдпреВрдкреНрд▓рдЧрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░рдЦрд╛
- рдкреНрд░реЛрдЬреЗрдХреНрдЯ "DebuggeePlugin" рдХреЗ рд▓рд┐рдП nuget рдкреИрдХреЗрдЬ Microsoft.VSSDK.Debugger.VSDConfigTool рдХрд╛ рд╕рдВрджрд░реНрдн рдЬреЛрдбрд╝реЗрдВред рдпрд╣ рд╡реАрдПрд╕рдбреА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХрд╛ рд╣рдорд╛рд░рд╛ рдЯреВрд▓ рд╣реИред
рдЕрдм, рд╣рдо рдЕрдкрдиреЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдЖрдЗрдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ - рдЗрд╕реЗ рдПрдХ рдореИрд╕реЗрдЬрдмреЙрдХреНрд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ рдЬреЛ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ "рд╣реИрд▓реЛ VSIX" рдЬрдм рд▓рдХреНрд╖реНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдХреЗ рдкрд╛рд░ рдЖрддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ
IDkmEntryPointNotification рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдХрдИ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рднрд░рддрд╛ рд╣реИред DkmEntryPointNotificationService рдирд╛рдордХ рдПрдХ рдирдпрд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ, рдФрд░
IDkmEntryPointNotification рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЗрдирд╣реЗрд░рд┐рдЯ рдХрд░реЗрдВ, рдФрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЫреЛрдбрд╝ рджреЗрдВ:
using Microsoft.VisualStudio.Debugger; using Microsoft.VisualStudio.Debugger.ComponentInterfaces; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DebuggeePlugin { class DkmEntryPointNotificationService : IDkmEntryPointNotification { public void OnEntryPoint(DkmProcess process, DkmThread thread, DkmEventDescriptor eventDescriptor) { throw new NotImplementedException(); } } }
рдлрд╝рд╛рдЗрд▓ рдХреЛ "рдбреАрдмрдЧреЗрдЬрдкреНрд▓реБрдЧрд┐рди" рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ "DkmEntryPointNotificationService.vsdconfigxml" рдЬреЛрдбрд╝реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдШреЛрд╖рд┐рдд рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЬреЛ Microsoft.VisualStudio.Debugger.ComponentInterfaces рдирд╛рдорд╕реНрдерд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╡реИрд╕реЗ, рдПрдХ рд╣реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдПрдХ рд╕рд╛рде рдХрдИ рдРрд╕реЗ рдЗрдВрдЯрд░рдлреЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреА ".vsdconfigxml" рдлрд╝рд╛рдЗрд▓ рдХреА рдмрд┐рд▓реНрдб рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (рдореИрдВ рдЧрдВрднреАрд░рддрд╛ рд╕реЗ)ред рд╣рдо DebuggeePlugin рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдирд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдбрд┐рдЯрд░ рдХреЗ рд╕рд╛рде рдЦреЛрд▓рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд XLM рдЯреИрдЧ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
<None Include="DkmEntryPointNotificationService.vsdconfigxml" />
рдФрд░ рдЗрд╕ рдЯреИрдЧ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ ItemGroup рдкрд░ рд▓реЗ рдЬрд╛рдПрдВ, рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреЛрдИ рдирд╣реАрдВ рд╕реЗ рдмрджрд▓рдХрд░ VsdConfigXmlFiles:
<ItemGroup> <VsdConfigXmlFiles Include="DkmEntryPointNotificationService.vsdconfigxml" /> </ItemGroup>
рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд╣реЗрдЬ рдФрд░ рдкреБрдирдГ рд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЕрдм, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдкрд░ рдЬрд╛рдПрдВред рдкрд╣рд▓реА рдмрд╛рдд: рдпрджрд┐ рдбрд┐рдмрдЧрдиреЗрдЧ.рд▓реБрдЧрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ vsdconfig.xsd рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝реА рдЬрд╛рддреА рд╣реИ, рддреЛ рдЙрд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдЗрд╕реЗ рдЕрдм рдмрджрд▓ рджреЗрдВрдЧреЗ, рдХреНрдпреЛрдВрдХрд┐ рдХрдЪреНрдЪреЗ рдкрд╛рда рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред DkmEntryPointNotificationService.vsdconfigxml рдЦреЛрд▓реЗрдВ рдФрд░ рдирд┐рдореНрди рдХреЗ рд╕рд╛рде рдкрд╛рда рдХреЛ рдмрджрд▓реЗрдВ:
<?xml version="1.0" encoding="utf-8"?> <Configuration xmlns="http://schemas.microsoft.com/vstudio/vsdconfig/2008"> <ManagedComponent ComponentId="422413E1-450E-40A6-AE24-7E80A81CC668" ComponentLevel=^_^quotЁШЩоquot^_^ AssemblyName="DebuggeePlugin"> <Class Name="DebuggeePlugin.DkmEntryPointNotificationService"> <Implements> <InterfaceGroup> <NoFilter/> <Interface Name="IDkmEntryPointNotification"/> </InterfaceGroup> </Implements> </Class> </ManagedComponent> </Configuration>
рдРрд╕реА рдХрд┐рд╕реА рднреА рдлрд╛рдЗрд▓ рдореЗрдВ, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдмрд╛рддреЛрдВ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рд╣реЛрдЧрд╛:
- ComponentId - рдпрд╣ рдорд╛рди GUID рдкреАрдврд╝реА рдХреЗ рдЙрдкрдХрд░рдг (рдЙрдкрдХрд░рдг -> CreateGUID) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
- рдХреЙрдореНрдкреЛрдиреЗрдиреНрдЯрд╡реЗрд▓ рдкрджрд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд╣рдорд╛рд░реЗ рдШрдЯрдХ рдХрд╛ рд╕реНрддрд░ рд╣реИред рдКрдкрд░ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рджреЗрдЦреЗрдВ рдФрд░ рд╡рд╛рдВрдЫрд┐рдд рд╕реАрдорд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MSDN рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рдореЗрдВ рдорджрдж рдХрд░реЗрдВред
- рдЕрд╕реЗрдВрдмрд▓реА рдирд╛рдо рд╣рдорд╛рд░реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдирд╛рдо рд╣реИ (рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ!)ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ DebuggeePlugin рд╣реЛрдЧрд╛
- рд╡рд░реНрдЧ рдХрд╛ рдирд╛рдо - рдЙрд╕ рдирд╛рдорд╕реНрдерд╛рди рд╕рд╣рд┐рдд рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕рдореЗрдВ рдХрдХреНрд╖рд╛ рд╕реНрдерд┐рдд рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, DebuggeePlugin.DkmEntryPointNotificationService
- InterfaceGroup рд╕рд░рдгреА - рдЗрд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЗрд╕ рдШрдЯрдХ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЧреВ рдХрд┐рдП рдЧрдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕рдЧреНрд░реБрдк рдиреЛрдб рдХреЗ рдЕрдВрджрд░, рдЗрд╕ рд╕рдореВрд╣ рдореЗрдВ, рд╕рднреА рдХреЗ рд▓рд┐рдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдЙрдк-рдиреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдлрд╝рд┐рд▓реНрдЯрд░, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рдеред рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдиреЛрдб рд╣реИ, рдФрд░ IdkmEntryPointNotification рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдирд╛рдо рд╣реИред рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рдХрдИ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдиреЛрдб рд╣реЛрдВрдЧреЗред
рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рдирд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рд╕реЗ рдбрд┐рдмрдЧрд░ рд╕реЗ рд╕реВрдЪрдирд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП, рдРрд╕реА рдлрд╛рдЗрд▓ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд▓реЗрдХрд┐рди рдордЬрд╛ рдпрд╣реАрдВ рдЦрддреНрдо рдирд╣реАрдВ рд╣реЛрддрд╛ред рдЗрд╕ рддрд░рд╣ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рд╛рдЗрд▓, рдмрд╛рдж рдореЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ .vsdconfig рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХрддреНрд░ рдХреА рдЬрд╛рддреА рд╣реИред рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд▓рдЧрдЗрди рдореЗрдирд┐рдлреЗрд╕реНрдЯ рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
- рд╣рдордиреЗ ".vsdconfigxml" рдлрд╝рд╛рдЗрд▓ рдЬрдирд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ ... рдПрдХ рдмрд╛рд░ рд╕рдорд╛рдзрд╛рди рдПрдХрддреНрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреЛрдИ .vsdconfig рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реЛрдЧреА)
- рдЙрд╕рдХреЗ рдмрд╛рдж, source.extension.vsixmanifest рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдЦреЛрд▓реЗрдВ рдФрд░ рд╕рдорд╛рдкрди рдкреИрдХреЗрдЬрдореЗрдирд┐рдлреЗрд╕реНрдЯ рдЯреИрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
<Assets> <Asset Type="DebuggerEngineExtension" d:Source="File" Path="DebuggeePlugin.vsdconfig" /> </Assets>
рдпрджрд┐ рдкреВрд░реНрдг рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рдж, HelloVSIX рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ "DebuggeePlugin.vsdconfig" рдлрд╝рд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛
рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдорд╛рдзрд╛рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рддреИрдпрд╛рд░реА рдХрд╛ рдХрд╛рдо рдЦрддреНрдо рд╣реЛ рдЪреБрдХрд╛ рд╣реИ! рдЖрдк рд╣рдорд╛рд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдбреАрдмрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ VisualStudio рдХрд╛ рдПрдХ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЙрджрд╛рд╣рд░рдг рд╢реБрд░реВ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (VSIX рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдбрд┐рдмрдЧ рд▓рдХреНрд╖реНрдп рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрджрдо рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИрдВ)ред рдЕрд╕рд▓ рдореЗрдВ, рд╣рдо рдбреАрдмрдЧ-> рд╕реНрдЯрд╛рд░реНрдЯрдбреЗрдмрдЧрд┐рдВрдЧ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ рд╡рд┐рдЬреБрдЕрд▓рд╕реНрдЯреИрдбрд┐рдпреЛ рдХрд╛ рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рд╣рдорд╛рд░рд╛ рдкреНрд▓рдЧрдЗрди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдк рдЯреВрд▓-> рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдФрд░ рдЕрдкрдбреЗрдЯ рдореЗрдиреВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рд╣рдордиреЗ IDkmEntryPointNotification рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рд╣рдореЗрдВ VisualStudio рдХреЗ рдПрдХ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рджрд░рдЕрд╕рд▓, рд╣рдо рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ,
C ++ -> рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (C ++ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ C ++ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдВрд╕ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ) рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ, рдЗрд╕реЗ
VSIXTestApp рдХрд╣реЗрдВ , рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рдЪрд▓рд╛рдПрдВ, рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЙрджрд╛рд╣рд░рдг рдиреЗ рдбреАрдмрдЧреЗрдЬрдкреНрд▓рдЧрд┐рди рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рд╣реИред DkmEntryPointNotificationService.OnEntryPointред рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЕрдм рдЖрдкрдХреЛ MessageBox рджрд┐рдЦрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдбрд┐рдмрдЧреНрдпреВрдкреНрд▓рдЧрд┐рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
- Microsoft.VisualStudio.Shell.15.0
- Microsoft.VisualStudio.Shell.Interop
- Microsoft.VisualStudio.Shell.Interop.8.0
- Microsoft.VisualStudio.OLE.Interop
DkmEntryPointNotificationService.cs рдлрд╝рд╛рдЗрд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рджреЛ рдкреНрд░рдпреЛрдЧ рдЬреЛрдбрд╝реЗрдВ:
using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop;
рдФрд░
DkmEntryPointNotificationService.OnEntryPoint рд╡рд┐рдзрд┐ рдореЗрдВ
VsShellUtilities.ShowMessageBox рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ:
using Microsoft.VisualStudio.Debugger; using Microsoft.VisualStudio.Debugger.ComponentInterfaces; using Microsoft.VisualStudio.Shell; using Microsoft.VisualStudio.Shell.Interop; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DebuggeePlugin { class DkmEntryPointNotificationService : IDkmEntryPointNotification { public void OnEntryPoint(DkmProcess process, DkmThread thread, DkmEventDescriptor eventDescriptor) { VsShellUtilities.ShowMessageBox(Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider, "Hello VSIX", "Hello VSIX", OLEMSGICON.OLEMSGICON_INFO, OLEMSGBUTTON.OLEMSGBUTTON_OK, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST); } } }
рд╣рдо рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдПрдХ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рд╡реЙрдпрд▓рд╛ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ!
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЙрджрд╛рд╣рд░рдг рдиреЗ MessageBox рдмрдирд╛рдпрд╛!

рдФрд░ рдХреНрдпрд╛, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓рд╛рдн?
рдпрд╣рд╛рдВ рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рд╡рд┐рдЬрд╝рд┐рдХреНрд╕ рд╕реНрдЯреВрдбрд┐рдпреЛ рдбреАрдмрдЧрд░ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧ-рдЗрди рд╡рд╛рд▓реЗ рд╡реАрдПрд╕рдЖрдИрдПрдХреНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдХреИрд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдкрд░рд┐рдгрд╛рдо рдХреА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЕрдзрд┐рдХрд╛рдВрд╢ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддрд╛ рд╣реИред рдпрд╣ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдмрд┐рдВрджреБ рд╣реИред рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рджрд┐рдЦрд╛рдКрдВрдЧрд╛: рдЖрдИрдбреАрдИ рдФрд░ рдбрд┐рдмрдЧ рд▓рдХреНрд╖реНрдп рдШрдЯрдХреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЙрдирдХреЙрд░реНрдб рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрдЧреЗ рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП, рдЖрдк рди рдХреЗрд╡рд▓ MSDN, рдмрд▓реНрдХрд┐ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд Microsoft рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд▓рд┐рдП рднреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:
github.com/microsoft/PTVSgithub.com/Microsoft/ConcordExtensibilitySamples