рдХреИрд╕реЗ рдПрдХ рдХреНрдпреВрдП рдЗрдВрдЬреАрдирд┐рдпрд░ рдиреЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдЯреЗрд╕реНрдЯ рдЖрдИрдЯреА рдореЗрдВ рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдкреВрд░реЗ рджрд┐рди рдХреЛ рдмрдЪрд╛рдпрд╛

рдбреЗрд╡рд▓рдкрд░ рдХреЗ рдЖрдзреБрдирд┐рдХ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрдкрдХрд░рдг рдПрдХ рджрд░реНрдЬрди рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ: рдПрдХ рдЖрдИрдбреАрдИ, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА, рд╡рд┐рднрд┐рдиреНрди рдврд╛рдВрдЪреЗ, рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдФрд░ рдХрдВрдЯреЗрдирд░реАрдХрд░рдг рдкреНрд░рдгрд╛рд▓реА, рдХрд╛рд░реНрдпрд╛рд▓рдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред

рдФрд░ рдЕрдХреНрд╕рд░ рд╣рдо, рдЗрд╕реЗ рдиреЛрдЯрд┐рд╕ рдХрд┐рдП рдмрд┐рдирд╛, рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреАрдорддреА рд╕рдордп рд╡реНрдпрддреАрдд рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпреЛрдВ рд╣рдо рдЫреЛрдЯреА рдЪреАрдЬрд╝реЛрдВ рдореЗрдВ рднреА рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЛ рдирд╣реАрдВ рдЕрдкрдирд╛рддреЗ рд╣реИрдВ? рдкрд╛рдВрдЪ рдорд┐рдирдЯ, рджрд┐рди рдореЗрдВ 5 рдмрд╛рд░ рдЧреБрдгрд╛, рд╣рдореЗрдВ рдкреНрд░рддрд┐ рдорд╛рд╣ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп рджрд┐рд╡рд╕ рджреЗрдЧрд╛, рдЬреЛ рдирд┐рдпрдорд┐рдд рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрдП, рдЬреЛ рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЯреЗрд╕реНрдЯ рдЖрдИрдЯреА рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдг рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╡реЗрдмрд╣реБрдХ

рдХреА рдХрд╣рд╛рдиреА рдЬрд╛рд░реА рд╣реИрдФрд░ рд╡реЗ рдХрд╛рдо рдкрд░ рдХрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдЖрдкрдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЖрдИрдбреАрдИ - рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реА рдХрд╣рд╛рдиреА рдкреЗрд╢ рдХрд░рддреЗ рд╣реИрдВред рдмрд┐рд▓реНрд▓реА рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдпрд╣ рд▓реЗрдЦ рдЯреЗрд╕реНрдЯ рдЖрдИрдЯреА рдореЗрдВ рд▓реЛрдЧреЛрдВ рдХреА рдПрдХ рдЕрддрд┐рдерд┐ рдкреЛрд╕реНрдЯ рд╣реИред



рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдЪреИрдЯрдмреЛрдЯ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЕрдЪреНрдЫреА рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рддрдХ рдпрд╣ рд╣рдореЗрдВ рдХреЗрд╡рд▓ рдСрдЯрд┐рдЬреНрдо рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред рдФрд░ рдЕрдЧрд░ рд╣рдо рдЯреЗрд╕реНрдЯ рдЖрдИрдЯреА рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдЦреНрдд рдПрдХреАрдХрд░рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛, рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкреЛрд░реНрдЯрд▓ рдкрд░ рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдордиреЗ рдЬрд▓реНрджрдмрд╛рдЬреА рдореЗрдВ рддреИрдирд╛рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдФрд░ рдПрдХ рд╕рд╛рдВрддреНрд╡рдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рд╡рд░реНрддрдорд╛рди рд╕рдорд╛рдзрд╛рди рдХреЛ рджреЗрдЦрд╛, рдПрдХ рдкрд░реАрдХреНрд╖рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдкрд╛рдпрд╛, рдЕрдкрдиреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рдСрдЯреЛрдЯреЗрд╕реНрдЯреНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рдирд┐рдХрд╛рд▓реА, рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рднреЗрдЬрд╛ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдорд╛рдзрд╛рди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд▓рдЧрд╛рддрд╛рд░ рдПрдХ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд╕рдореЗрдЯрдирд╛ (рднрд▓реЗ рд╣реА рдпрд╣ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╣рддреЗ рд╣реИрдВ) рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдФрд░ рдЖрдкрд╕ рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╢рд╛рд╢реНрд╡рдд рдирд┐рд░реНрднрд░рддрд╛ рднреА рдЕрдЪреНрдЫреЗ рд╕реНрд╡рд╛рдж рдХрд╛ рд╕рдВрдХреЗрдд рдирд╣реАрдВ рд╣реИред

рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЖрдП, рдФрд░ рдЕрдм рд╣рдо рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рдмрддрд╛рдПрдВрдЧреЗ рдХрд┐ рд╣рдордиреЗ рдЗрд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ред

рддрдХрдиреАрдХреА рдкрдХреНрд╖


рд╣рдо рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╣реА рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗред рдЖрдЦрд┐рд░рдХрд╛рд░, IDE рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рднреА рдЙрддрдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдЬрд┐рддрдирд╛ рдХрд┐ рдЦреБрдж IDEред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рд╕рднреА рдШрдЯрдХ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рд╣рдо рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЗрдВрд╕реНрдЯреЙрд▓рд░ рдХреЛ рдвреВрдВрдврддреЗ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ "рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рдиреНрд╕ рдХрд╛ рд╡рд┐рдХрд╛рд╕" рдореЙрдбреНрдпреВрд▓ рдХреА



рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ : рдПрдХ рдЪреЗрдХ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХреЗ рд▓рд┐рдП рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓рдЧрднрдЧ рдирд┐рдореНрди рд╕реНрдерд┐рддрд┐ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:



рддреИрдпрд╛рд░реА рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдЦрддреНрдо рд╣реЛ рдЧрдпрд╛ рд╣реИ, рд╣рдо рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдФрд░ рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдЦреБрдж рдХреЛ рдбреБрдмреЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо "рд╡реАрдПрд╕рдЖрдИрдПрдХреНрд╕" рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрд▓рдмреНрдз рд╕рдорд╛рдзрд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдХрд░ рдФрд░ рд╡реАрдПрд╕рдЖрдИрдПрдХреНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ (рд╕реА #) рдХрд╛ рдЪрдпрди рдХрд░рдХреЗ рдирдП рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗ:



рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдХреЗ рдмрд╛рдж, рд╣рдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╕рд░рд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ:



рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, source.extension.vsixmanifest рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрдЯ рд╣реИ рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдореВрд▓ рдЧреБрдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЙрддреНрдкрд╛рдж рдХрд╛ рдирд╛рдо, рд▓реЗрдЦрдХ, рд╕рдВрд╕реНрдХрд░рдг, рд╡рд┐рд╡рд░рдг, рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЖрдЗрдХрди, рдЖрдИрдбреАрдИ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗред рд╡реИрд╕реЗ, рдпрд╣ рдпреЗ рдЧреБрдг рд╣реИрдВ рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╕реНрдЯреЛрд░ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓рд░ рджреЛрдиреЛрдВ рдореЗрдВ рджреЗрдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВред

VSIXProject3Package.cs (рдореБрдЦреМрдЯрд╛: {ProjectName} Package.cs), рдмрджрд▓реЗ рдореЗрдВ, рдПрдХ рд╢реБрд░реБрдЖрддреА рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рд╕рднреА рдЙрдкрд▓рдмреНрдз рдЖрджреЗрд╢реЛрдВ рдФрд░ рд╕рдВрд╕рд╛рдзрди рд╕реНрдХреАрдорд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЕрдм рдЯреАрдореЛрдВ рдХреЛ рдЬрд╛рдиреЗрдВрдЧреЗред

рдЖрдЗрдП рдПрдХ рдирдИ рдЯреАрдо рдмрдирд╛рдПрдВ рдЬреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ WPF рд╡рд┐рдВрдбреЛ рдЦреЛрд▓рддрд╛ рд╣реИ: рд╣рдореЗрдВ рд▓рдХреНрд╖реНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛, рдЙрд╕рдХреЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рд╕реНрдерд╛рди рдФрд░ рдирд╛рдо, рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрд╢рди рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╣рдо рдПрдХ рдирдП рддрддреНрд╡ рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдХрд╛рдлреА рд▓реЙрдЬрд┐рдХрд▓ рдХрдорд╛рдВрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред



рдХрдИ рд▓реЛрдЧ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ: рдЬрдм рдирд╛рдо рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Async Tool Window рдФрд░ Tool Window рдЙрдкрдпреБрдХреНрдд рд╣реЛрдВ рддреЛ рд╣рдо рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд░рддреЗ рд╣реИрдВ? рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рдЗрди рджреЛ рддрддреНрд╡реЛрдВ рдХреЛ рдмрдирд╛рддреЗ рд╕рдордп, рд╣рдо xaml рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рд░реНрдХрдЕрдк рдлрд╝рд╛рдЗрд▓, рдЙрд╕реА рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реАрдПрд╕ рдлрд╝рд╛рдЗрд▓, рдФрд░ рдПрдХ рдХрдорд╛рдВрдб рднреА рддреИрдирд╛рдд рдХрд░реЗрдВрдЧреЗред рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛрдЧрд╛, рдЬреИрд╕реЗ рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЯреВрд▓ рд╡рд┐рдВрдбреЛ (рдпрд╣ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ рддреЛ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ) рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдореЗрдВ рдПрдХреАрдХреГрдд рд╡рд┐рдВрдбреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ рдПрдХ рд╡рд┐рдВрдбреЛ рдорд┐рд▓рддреА рд╣реИ, рдЬрд┐рд╕реЗ рдбрд┐рдмрдЧ рд╡рд┐рдВрдбреЛ рдХреЗ рдмрдЬрд╛рдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рдпрд╣ рд╕рдм рдЕрдиреБрдХреВрд▓рди рдпреЛрдЧреНрдп рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рд╡рд┐рдВрдбреЛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо рдЯреВрд▓ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдорд┐рдд WPF рд╡рд┐рдВрдбреЛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирдХ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рд╡рд┐рдВрдбреЛ рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЫреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдмрд╛рдК, рдирд┐рд░реНрдмрд╛рдз рдФрд░ рдХрдордЬреЛрд░ рд░реВрдк рд╕реЗ рд▓реЗрдЦ рдХреЗ рд╢реАрд░реНрд╖рдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдПрдХрдорд╛рддреНрд░ рдЕрдиреБрд╢рдВрд╕рд╛ рдЬрд┐рд╕реЗ рдЖрдк рдпрд╣рд╛рдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ: рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдЬреЛрдбрд╝рддреЗ рд╕рдордп рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдЖрдкрдХреЛ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреА рд╕реВрдЪреА рдореЗрдВ WPF рд╡рд┐рдВрдбреЛ рдирд╣реАрдВ рджрд┐рдЦрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╕рдмрд╕реЗ рддреЗрдЬ рдФрд░ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдЕрд▓рдЧ рдРрд╕реА рдЦрд┐рдбрд╝рдХреА рдмрдирд╛рдирд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИ (рд╕реНрдерд╛рди рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ рдирд╛рдо рдирд╣реАрдВ)ред



рдЗрд╕рд▓рд┐рдП, рдПрдХ рдирдИ рдЯреАрдо рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЬрд┐рд╕реЗ рд╣рдордиреЗ OpenSettingsCommand рдХрд╣рд╛, рдкреМрд░рд╛рдгрд┐рдХ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛрдб рдкреАрдврд╝реА рдПрдХ рдЯреАрдо рдХреНрд▓рд╛рд╕ рдФрд░ рдПрдХ vsct рдкреНрд░рд╛рд░реВрдк рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рддреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдорд╛рд░реНрдХрдЕрдк рдФрд░ рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рдореИрдкрд┐рдВрдЧ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдмрдЯрди рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИред рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдЕрддреНрдпрдзрд┐рдХ рд╡рд╛рдВрдЫрдиреАрдп рд╣реИ: рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛, рдпрд╣ рдЖрдкрдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ "рдПрдХреНрд╕рдЯреЗрдВрд╢рди" рдореЗрдиреВ рдореЗрдВ рд░рдЦреЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рджреЛ рдЯреАрдореЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдмрдирд╛рдХрд░ рдФрд░ рдЗрд╕реЗ рд╕реАрдзреЗ рдЯреВрд▓рдмрд╛рд░ рдкрд░ рд░рдЦрдХрд░ рдЗрд╕ рдорд╛рд░реНрдХрдЕрдк рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ред рдПрдХ рдЖрджреЗрд╢ рдФрд░ рдорд╛рд░реНрдХрдЕрдк рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣рдорд╛рд░реЗ рднрдВрдбрд╛рд░ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдирд┐рд░реНрдорд┐рдд рд╡рд░реНрдЧ рдореЗрдВ, рд╣рдо рдПрдХреНрд╕рдХреНрдпреВрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдпрд╣ рдХрдорд╛рдВрдб рдХрд╣рд╛ рдЬрд╛рдиреЗ рдкрд░ рд╕рдм рдХреБрдЫ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рдпрд╣ рдпрд╣рд╛рдВ рд╣реИ рдХрд┐ рд╣рдо рдирдИ рдбрдмреНрд▓реНрдпреВрдкреАрдПрдл-рд╡рд┐рдВрдбреЛ рдХреЗ рдЖрд░рдВрднреАрдХрд░рдг рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВрдЧреЗред

Envdte


рдФрд░ рд╣рдордиреЗ рд╕реБрдЧрдорддрд╛ рд╕реЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрд╕рдбреАрдХреЗ, рдЕрд░реНрдерд╛рддреН рдПрдирдбреАрдбреАрдЯреАрдИ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдпрд╣ COM рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: рд╕рдХреНрд░рд┐рдп рд╕рдорд╛рдзрд╛рди рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ, рд╕рдХреНрд░рд┐рдп рд╡рд┐рдВрдбреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ, рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛрдб рдкрдврд╝реЗрдВ рдФрд░ рдмрд╣реБрдд рдХреБрдЫред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЙрддрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдХрд╛рд░реНрдп рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╕рдХреНрд░рд┐рдп рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред

рдЫреЛрдЯреЗ рдореБрдХреНрдд рдХреЛрдб рдЖрдзрд╛рд░ рдХреЗ рдмрд╛рд╡рдЬреВрдж, рд╣рдореЗрдВ рд╕рдХреНрд░рд┐рдп рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

ThreadHelper.ThrowIfNotOnUIThread();
var activeVS = (DTE)Microsoft.VisualStudio.Shell.ServiceProvider.GlobalProvider.GetService(typeof(DTE))
 ?? throw new InvalidOperationException("DTE not found");
var activeProjects = new List<Project>();
activeProjects.AddRange(activeVS.Solution.Projects.Cast<Project>());
//  , activeProjects         

рдЗрддрдиреА рдЖрд╕рд╛рдиреА рд╕реЗ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╣рдо рд╕рднреА рд╕рдХреНрд░рд┐рдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рд╕реВрдЪреА рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд╛рдо (рдирд╛рдо рд╕рдВрдкрддреНрддрд┐) рдФрд░ csproj рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде (рдЕрдЪрд╛рдирдХ, FullName) рд▓реЗ рд▓реЛ: рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд▓реЛрдЧреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкреВрдЫрдиреЗ рдФрд░ рдЦреЛрдЬ рдпреЛрдЧреНрдп рдЦреЛрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдореИрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рд╣реИред

рдЕрдЧрд▓рд╛ рдХрджрдо рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛, рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЯреЗрд╕реНрдЯ рдЖрдИрдЯреА рдкреЛрд░реНрдЯрд▓ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╣реИред рд╣рдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛рдиреЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рд╡рд░реНрдЧ рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ рдЬреЛ рднрд░реА рд╣реБрдИ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рдСрдЯреЛрдЯреЗрд╕реНрдЯреНрд╕ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

public class AutotestsService
    {
        public IList<AutotestModel> GetAutotestsFromAssembly<TTestClassAttribute, TTestMethodAttribute>(Assembly assembly, Guid projectId, string repositoryLink)
            where TTestClassAttribute : Attribute
            where TTestMethodAttribute : Attribute
        {
            MethodInfo[] testMethods = GetAutotestFromAssembly<TTestClassAttribute, TTestMethodAttribute>(assembly);

            List<AutotestModel> allModels = new List<AutotestModel>();
            foreach (MethodInfo method in testMethods)
            {
                AutotestModel autotest = new AutotestModel()
                {
                    ExternalId = method.Name,
                    LinkToRepository = repositoryLink,
                    ProjectId = projectId,
                    Name = GetAutotestName(method.Name),
                    Classname = method.DeclaringType.Name,
                    Namespace = GetAutotestNamespace(method)
                };

                allModels.Add(autotest);
            }

            return allModels;
        }

        private static MethodInfo[] GetAutotestFromAssembly<TTestClassAttribute, TTestMethodAttribute>(Assembly assembly)
            where TTestClassAttribute : Attribute
            where TTestMethodAttribute : Attribute
        {
            return assembly.GetTypes()
                .Where(c => c.IsDefined(typeof(TTestClassAttribute)))
                .SelectMany(t => t.GetMethods())
                .Where(m => m.IsDefined(typeof(TTestMethodAttribute)))
                .ToArray();
        }

        private string GetAutotestName(string autotestExternalId)
        {
            StringBuilder autotestName = new StringBuilder();

            for (int i = 0; i < autotestExternalId.Length; i++)
            {
                if (char.IsUpper(autotestExternalId[i]) && i != 0)
                    autotestName.Append(' ');
                autotestName.Append(autotestExternalId[i]);
            }

            return autotestName.ToString();
        }

        private string GetAutotestNamespace(MethodInfo testMethod)
        {
            return testMethod.DeclaringType.FullName
                .Replace($".{testMethod.DeclaringType.Name}", string.Empty);
        }
    }

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рд╕рдВрдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рд╣рдореЗрд╢рд╛ рд╣рдорд╛рд░реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдЗрд╕рд▓рд┐рдП, рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рд╣рдорд╛рд░реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рддрд░реНрдХ рдХреЛ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдПрдХ рдирдИ рдХрдорд╛рдВрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЬрд┐рд╕ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЙрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЙрд╕реЗ рдЯреЗрд╕реНрдЯ рдХрдХреНрд╖рд╛рдУрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд╕рд╣реЗрдЬреЗ рдЧрдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдкреИрд░рд╛рдореАрдЯрд░реЛрдВ рдХреЛ рднреА рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

var settings = Properties.Settings.Default;
var executor = new LinkExecutor();
await executor.Execute<TestClassAttribute, TestMethodAttribute>(
    settings.Domain,
    settings.SecretKey,
    settings.ProjectNameInTestIT,
    settings.RepositoryLink ?? string.Empty,
    settings.AssemblyPath,
    Logger);

рдорд╣рддреНрд╡рдкреВрд░реНрдг рдиреЛрдЯ: рд╣рдо рд▓реЙрдЧрд░ рдХреЛ рд╕реАрдзреЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕рдВрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ рддрдХрдиреАрдХреА рдЬрд╛рдирдХрд╛рд░реА рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗрд╡рд▓ рдЗрд╕ рдЖрдИрдбреАрдИ рд╕реЗ рдмрдВрдзрд╛ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдЫреЛрдбрд╝рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдкрд░рд┐рдгрд╛рдо


рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдорд┐рд▓рд╛:



. , Visual Studio, , Visual Studio Visual Studio Visual Studio Visual Studio. , .



рдЖрдЗрдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕рдорд╛рдзрд╛рди рдЦреЛрд▓реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реИ, рдФрд░ рдЙрд╕ рдкрд░ рд╣рдорд╛рд░реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВред рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп, рд╣рдо рддреБрд░рдВрдд рдкреИрдирд▓ рдкрд░ рдПрдХ рдирдпрд╛ рдмрдЯрди рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:



рддреБрд░рдВрдд рдЕрдкрдиреЗ рдирд┐рдЬреА рдЦрд╛рддреЗ рд╕реЗ рдЧреБрдкреНрдд рдПрдкреАрдЖрдИ рдХреБрдВрдЬреА рд▓реЗ рд▓реЗрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рддреИрдпрд╛рд░ рдХрд░реЗрдВ:





рдЕрдЧрд▓рд╛, рд╡рд┐рд╕реНрддрд╛рд░ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВред рдЖрдЗрдП рд╡рд┐рд╕реНрддрд╛рд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдЦрд┐рдбрд╝рдХреА рдЦреЛрд▓реЗрдВ рдФрд░ рдЦреЗрддреЛрдВ рдореЗрдВ рднрд░реЗрдВ:



рд╣рдордиреЗ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрд╕рдбреАрдХреЗ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╡рд┐рдВрдбреЛ рдбрд┐рдЬрд╛рдЗрдирд░ рдХреЛ рд╡рд░реНрддрдорд╛рди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рд╕реВрдЪреА рдкрд╛рд░рд┐рдд рдХреА, рдФрд░ рд╣рдордиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж "рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбреАрдПрд▓" рд╡рд┐рдХрд▓реНрдк рд▓реЛрдб рдХрд┐рдП: рд╕реЗрд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рд╕рднреА рд╕реАрдПрд▓ рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХреА рдЧрдИ "UnitTestProject "рдФрд░ рд╣рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд┐рдХрд▓реНрдк рджрд┐рдЦрд╛рдПред рд╣рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреА рдореБрдЦреНрдп рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЪрд▓рд╛рддреЗ рд╣реИрдВред

рдЖрдЙрдЯрдкреБрдЯ рд╡рд┐рдВрдбреЛ рдореЗрдВ, рдХреБрдЫ рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЗрдЦрддреЗ рд╣реИрдВ:



рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ - рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ рдХрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, 3 рдпреВрдирд┐рдЯ рдкрд░реАрдХреНрд╖рдг рдФрд░ 3 рдПрдХреАрдХрд░рдг рдкрд░реАрдХреНрд╖рдг рдереЗред рд╕рдЪ рд▓рдЧрддрд╛ рд╣реИред рдЬрд╛рдВрдЪреЗрдВ рдХрд┐ рдПрдХ рдкреЛрд░реНрдЯрд▓ рд╣реИ:



рдирд┐рд╖реНрдХрд░реНрд╖


рдЖрдЬ рд╣рдордиреЗ рдкрд░реАрдХреНрд╖рдг рдЖрдИрдЯреА рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рдСрдЯреЛрдЯреЗрд╕реНрдЯреНрд╕ рдХреА рд╕реВрдЪреА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдмрдирд╛рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреАред рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╡рд┐рдХрд▓реНрдк рдХреЗрд╡рд▓ рдЖрдкрдХреА рдХрд▓реНрдкрдирд╛ рддрдХ рд╕реАрдорд┐рдд рд╣реИрдВ: рдЖрдк рдПрдХ рдЯреАрдо рдХреЗ рд╕рд╛рде рдЪреИрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдЕрдкрдиреА рд╢рд╛рдЦрд╛ рдкрд░ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдЯреВрдЯрдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реВрдЪрдирд╛рдПрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдпрд╣рд╛рдВ рддрдХ рдХрд┐ рдмреЙрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реА рдХрд▓реНрдкрдирд╛рдУрдВ рдореЗрдВ , рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рдПрдХ рдкрд┐рдЬреНрдЬрд╛ рдСрд░реНрдбрд░ рдмрдЯрди рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рдкрдирд╛, рд╕реГрдЬрди, рд╕рдордп рдмрдЪрд╛рдУ рдФрд░ рд╣рдореЗрд╢рд╛ рд░рдЪрдирд╛рддреНрдордХ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рд░рд╣реЛ!

рд▓реЗрдЦрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ



рдорд┐рдЦрд╛рдЗрд▓ рдкрд┐рд░реЛрдЧреЛрд╡реНрд╕реНрдХреА рдПрдХ .NET рдбреЗрд╡рд▓рдкрд░ рд╣реИред рд╕рд╛рдордЧреНрд░реА рдХреЛ рдЯреЗрд╕реНрдЯ рдЖрдИрдЯреА рдЯреАрдо рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдореЗрдВ рдлреЗрд╕рдмреБрдХ рдкрд░ рд╣рдорд╛рд░реЗ рд╕рдореВрд╣, рд╣рдо, рдЧреБрдгрд╡рддреНрддрд╛ рдЖрд╢реНрд╡рд╛рд╕рди рдореЗрдВ рдХрд╛рдо рдХрд░ рдкрд░реАрдХреНрд╖рдг, рдЙрдкрдХрд░рдг рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

All Articles