рдЕрдХреНрд╕рд░, рдбреЗрд╡рд▓рдкрд░ рд╕рдорд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдореБрдЦреНрдп рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╡рд╛рд▓ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рд╕реИрдХрдбрд╝реЛрдВ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛рдУрдВ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдХрд╛рд░реНрдп рдРрд╕рд╛ рд╣реИ рдХрд┐ рдореБрдЦреНрдп рдХреЛрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рд▓реЛрдб рдХрд░ рд╕рдХрддрд╛ рд╣реИред .NET рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдУрд╡рд░рд╡рд░реНрдХ рд╢реБрд░реВ рдореЗрдВ рдпрд╣рд╛рдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╢рдмреНрдж "рдкреНрд░рддрд┐рдмрд┐рдВрдм" рдЖрдкрдХреЛ рдЬреНрдЮрд╛рдд рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд╛рд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд╣рдо рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрд╛рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ ... рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рд╕рдмрд╕реЗ "рд╕рдлрд╛рдИ рд╕реЗ" рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╛рдиреА рдПрдХ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде - рдЬрд╛рдВрдЪ рдХреЗ рддрд╣рдд рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рдЙрдирдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдмрд╛рдж рдЕрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рд▓рд┐рдП рдХрд╛рд░реНрдп: рдЖрдкрдХреЛ рдПрдХ рдХрдВрд╕реЛрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ExtensionLoader, рдЬреЛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЕрдкрдиреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╕рднреА рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬреЛ IExtension рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
interface IExtension { String GetExtensionName(); }
рдкрд╛рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрд╡реЗрджрди рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдпрд╛ рд╡рд░реНрдЧ (IExtension рдХреЗ рд╕рд╛рде) рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХрдорд╛рддреНрд░ GetExtensionName () рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдкрд░рд┐рдгрд╛рдо рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдРрд╕рд╛ рдерд╛ ...
рдЗрд╕ рдХрд╛рд░реНрдп рдореЗрдВ рдПрдХ рдЕрддрд┐ рд╕реВрдХреНрд╖реНрдо рдЕрдВрддрд░ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛: рдЖрд╡реЗрджрди рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╕рднреА рд▓реЛрдб рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЕрдирд▓реЛрдб рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдпрд╣реАрдВ рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ рдорд╕реНрддреАред рдПрдХ рддреНрд╡рд░рд┐рдд googling рдиреЗ рдХреЛрдИ рднреА рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдпрд╛ред рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рд▓рдЧрд╛ рдФрд░ рдореИрдВ рдЗрд╕реЗ рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ ... рд░рдЪрдирд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рд╡реНрдпрд░реНрде рдЭреВрда рдирд╣реАрдВ рдмреЛрд▓рдирд╛ ...
рдЖрдЗрдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВред рдпрд╣ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЛрдЧреА, рддрд╛рдХрд┐ рдпрд╣ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рд╕рднреА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХреЛрд░ рджреЛрдиреЛрдВ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛ рд╕рдХреЗред рдпрд╣ рдПрдХ рддрд░рд╣ рдХреА рдкрд╕рдВрдж рд╣реИ, рдЬрд╛рд╣рд┐рд░ рд╣реИред рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкрд░ рд╣рдорд╛рд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реЛрдЧрд╛ред рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рд░реНрдп рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛ред
рдЕрдЧрд▓рд╛, рд╣рдо IExtension рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рднреА рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЕрд▓рдЧ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╣реЛрдЧреА, рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджрд┐рдП рдЧрдП рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдЧрд╛ред
public class Extension1 : MarshalByRefObject, IExtension { public Extension1() { } public string GetExtensionName() { return "Extension 1 from " + AppDomain.CurrentDomain.FriendlyName; } }
рдПрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдкрд╛рдардХ рдкрд╣рд▓реЗ рд╣реА рдХреБрдЫ рдЬреНрдпрд╛рджрддрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗ рдЪреБрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЙрд╕реЗ рдпрд╣рд╛рдБ рджреЗрдЦрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдереАред рдЕрд░реНрдерд╛рддреН, MarshalByRefObject рд╕реЗ рд╡рд┐рд░рд╛рд╕рддред рдпрд╣рд╛рдБ рдЯреНрд░рд┐рдХ рдпрд╣ рд╣реИ: рдпрджрд┐ рд╣рдо MarshalByRefObject рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрдм рдкреНрд░рддрд┐рдмрд┐рдВрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рд╡рд┐рдзрд┐ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╡рд░реНрддрдорд╛рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдбреЛрдореЗрди рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдВ рд╕реЗ рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рдЙрддрд╛рд░рдиреЗ рдХреА рдЕрд╕рдВрднрд╡рддрд╛ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдЕрд╕реЗрдВрдмрд▓реА рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЕрдирд▓реЛрдб рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВ (рдХреЗрд╡рд▓ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреВрд░реЗ рдбреЛрдореЗрди рджреНрд╡рд╛рд░рд╛)ред рдХрд╛рд░реНрдп рдирд┐рд╖реНрдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЧреЗ рдореИрдВ рдЖрдкрдХреЛ "рдЙрдмрд╛рдК рддрд░реАрдХреЗ" рджреВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рджреЗрдЦрдирд╛ рдирд╣реАрдВ рд╣реИред рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓реЛрдбрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрдирдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧрд┐рддрд╛рд╡рд╛рджреА рдХрд╛рд░реНрдп рд╣реИред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреЛ рд╕рд░рд▓ рддрд░реАрдХреЗ рднреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рд▓реЗрдЦ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╡рд┐рдзрд┐рдпрд╛рдВ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддреА рд╣реИрдВ рдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рдХреЙрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдпреЗ рдХреЗрд╡рд▓ рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рд╣реИрдВред
рдЦреИрд░, рдФрд░ рдЕрдВрдд рдореЗрдВ, рдореБрдЦреНрдп рд╡рд┐рдзрд┐ ... рдЬреЛ рдпрд╣ рд╕рдм "рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ"
static void Main(string[] args) {