{"id":310553,"date":"2020-09-27T15:00:29","date_gmt":"2020-09-27T15:00:29","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=310553"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=310553","title":{"rendered":"Aspect Oriented Programming (AOP) \u0447\u0435\u0440\u0435\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/520834\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pw\/2f\/w6\/pw2fw6fhcagoqxtrjpf5-lhjveg.png\"\/><\/p>\n<p>  \u0410\u0441\u043f\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0447\u0438\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0442\u0438\u043f\u0430 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u044b.<\/p>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0430, \u0442.\u0435. \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043d\u0435\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u00ab\u0432\u043f\u043b\u0435\u0442\u0430\u0435\u0442\u00bb \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438.<\/p>\n<p>  \u041d\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434 (\u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432), \u044d\u0442\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432. \u0421 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e Roslyn, \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0430\u0451\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442. <br \/>  <a name=\"habracut\"><\/a><br \/>  \u041f\u043e \u043c\u043e\u0438\u043c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f\u043c, \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 .Net, \u0430\u0441\u043f\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u043e\u0439 Java. \u042f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430 \u044d\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0433\u043e \u0438 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f, \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u043e\u0433\u043e \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u0430\u043a\u043e\u0433\u043e \u0432 Java.<\/p>\n<p>  PostSharp \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043e\u0431\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u043e, \u043d\u043e \u043d\u0435 \u043c\u043d\u043e\u0433\u0438\u0435 \u0433\u043e\u0442\u043e\u0432\u044b \u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0441\u043e\u0442\u043d\u0438 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432 \u0437\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0435\u0433\u043e \u0432 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0430 community \u0432\u0435\u0440\u0441\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0430 \u0432 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u0445. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0441\u0442\u044c \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u044b, \u043d\u043e \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043e\u043d\u0438 \u043d\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u0438 \u0443\u0440\u043e\u0432\u043d\u044f PostSharp.<\/p>\n<p>  \u041c\u043e\u0436\u043d\u043e <a href=\"https:\/\/www.postsharp.net\/alternatives\">\u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 <\/a> (\u043d\u0430\u0434\u043e \u0438\u043c\u0435\u0442\u044c \u0432 \u0432\u0438\u0434\u0443 \u0447\u0442\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432\u043b\u0430\u0434\u0435\u043b\u044c\u0446\u0435\u043c PostSharp, \u043d\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u0443 \u043e\u043d\u043e \u0434\u0430\u0451\u0442).<\/p>\n<h3>\u041d\u0430\u0448 \u043f\u0443\u0442\u044c \u043a \u0430\u0441\u043f\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e<\/h3>\n<p>  \u041c\u044b \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043a\u043e\u043d\u0441\u0430\u043b\u0442\u0438\u043d\u0433\u043e\u0432\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f (12 \u0447\u0435\u043b\u043e\u0432\u0435\u043a) \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043d\u0430\u0448\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434. \u0422.\u0435. \u043d\u0430\u043c \u043f\u043b\u0430\u0442\u044f\u0442 \u0437\u0430 \u0442\u043e \u0447\u0442\u043e \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u041c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0434\u0443\u0441\u0442\u0440\u0438\u0438 \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u043d\u0430\u0448\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u044b \u0438\u043c\u0435\u044e\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0445\u043e\u0436 \u043c\u0435\u0436\u0434\u0443 \u044d\u0442\u0438\u043c\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c. <\/p>\n<p>  \u0410 \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u044b \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445, \u0442\u043e \u0434\u043b\u044f \u043d\u0430\u0441, \u043e\u0434\u043d\u0430 \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043e\u0442 \u0440\u0443\u0442\u0438\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. <\/p>\n<p>  \u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0433\u043e, \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u044b \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0438 \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f Visual Studio \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438 \u0437\u0430\u0434\u0430\u0447. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u0432, \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0432 \u0432\u044b\u0441\u043e\u043a\u043e\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 (\u043c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u043b\u043e \u0432\u044b\u0448\u0435).<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0448\u0430\u0433\u043e\u043c, \u0431\u044b\u043b\u0430 \u0438\u0434\u0435\u044f \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u041c\u044b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u0432 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u044b\u043b \u0434\u0430\u043b\u0451\u043a \u043e\u0442 \u043d\u0430\u0448\u0438\u0445 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0439. \u041f\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u044d\u0442\u043e \u0441\u043e\u0432\u043f\u0430\u043b\u043e \u0441 \u0432\u044b\u0445\u043e\u0434\u043e\u043c \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Roslyn \u0438 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443 \u043d\u0430\u0441 \u0440\u043e\u0434\u0438\u043b\u0430\u0441\u044c \u0438\u0434\u0435\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043a\u043e\u0434\u0430 \u0438 Roslyn.<\/p>\n<p>  \u0411\u0443\u043a\u0432\u0430\u043b\u044c\u043d\u043e \u0437\u0430 \u043f\u0430\u0440\u0443 \u043d\u0435\u0434\u0435\u043b\u044c \u0431\u044b\u043b \u0441\u043e\u0437\u0434\u0430\u043d \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u0438 \u043f\u043e \u043d\u0430\u0448\u0438\u043c \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u044f\u043c, \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0435\u0440\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u043c. \u0421\u043f\u0443\u0441\u0442\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u0447\u0442\u043e \u043d\u0430\u0448\u0438 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043e\u043f\u0440\u0430\u0432\u0434\u0430\u043b\u0438\u0441\u044c \u0438 \u0434\u0430\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u043c\u044b \u0442\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0438. \u041c\u044b \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0448\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u044b \u0442\u0430\u043a\u0436\u0435 \u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0438 \u0434\u0430\u0436\u0435 \u0437\u0430\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b.<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043d\u0430\u0448 \u0438\u043d\u0442\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u0441\u0451 \u0435\u0449\u0451 \u0434\u0430\u043b\u0451\u043a \u043e\u0442 \u0438\u0434\u0435\u0430\u043b\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438, \u043f\u0435\u0440\u0432\u0430\u044f \u044d\u0442\u043e \u0442\u043e \u043a\u0430\u043a \u044f \u0432\u0438\u0436\u0443 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u0430\u043d\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0438 \u0432\u0442\u043e\u0440\u0430\u044f, \u0442\u043e \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0443 \u043d\u0430\u0441.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0434 \u0442\u0435\u043c \u043a\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u0439\u0434\u0451\u043c \u043a \u0434\u0435\u0442\u0430\u043b\u044f\u043c, \u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0435 \u2013 \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0431\u044b\u043b\u0438 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u044b \u0434\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u043c \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u0434\u0435\u044e, \u0431\u0435\u0437 \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c\u0438 \u0434\u0435\u0442\u0430\u043b\u044f\u043c\u0438.<\/p>\n<h3>\u041a\u0430\u043a \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 <\/h3>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043b\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430, \u0443 \u043c\u0435\u043d\u044f \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0432\u0438\u0434\u0435\u043d\u044c\u0435 \u043a\u0430\u043a \u0431\u044b \u044f \u0445\u043e\u0442\u0435\u043b, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u044b \u0436\u0438\u043b\u0438 \u0432 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435.<\/p>\n<p>  \u0412 \u043c\u043e\u0451\u043c \u0432\u0438\u0434\u0435\u043d\u044c\u0438 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u0438 IDE.<\/p>\n<p>  \u0418\u0434\u0435\u044f \u0431\u044b\u043b\u0430 \u043d\u0430\u0432\u0435\u044f\u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u00abpartial\u00bb \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u044f\u0437\u044b\u043a\u0430 C#. \u042d\u0442\u0430, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0430\u0441\u0441\u0430, \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438\u043b\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0444\u0430\u0439\u043b\u0430\u0445) \u043a\u0430\u0440\u0434\u0438\u043d\u0430\u043b\u044c\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0438\u043b\u0430 \u0438 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434. \u0422.\u0435. \u044d\u0442\u043e \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u043e\u0434\u0430 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438. \u0414\u043b\u044f \u0442\u0435\u0445 \u043a\u0442\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u0442 \u044f\u0437\u044b\u043a\u0430 C#, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<p>  \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0444\u043e\u0440\u043c\u0430 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 Example1.aspx  <\/p>\n<pre><code class=\"php\">&lt;%@ Page Language=&quot;C#&quot; AutoEventWireup=&quot;True&quot; %&gt; \/\/ . . . &lt;asp:Button id=&quot;btnSubmit&quot;            Text=&quot;Submit&quot;            OnClick=&quot; btnSubmit_Click&quot;             runat=&quot;server&quot;\/&gt; \/\/ . . .<\/code><\/pre>\n<p>  \u0418 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0446\u0432\u0435\u0442\u0430 \u043a\u043d\u043e\u043f\u043a\u0438 \u043d\u0430 \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043f\u0440\u0438 \u0435\u0451 \u043d\u0430\u0436\u0430\u0442\u0438\u0438) \u0432 \u0444\u0430\u0439\u043b\u0435 Example1.aspx.cs<\/p>\n<pre><code class=\"cs\">public partial class ExamplePage1 : System.Web.UI.Page, IMyInterface {   protected void btnSubmit_Click(Object sender, EventArgs e)    {     btnSubmit.Color = Color.Red;   } }<\/code><\/pre>\n<p>  \u041d\u0430\u043b\u0438\u0447\u0438\u0435 \u0432 \u044f\u0437\u044b\u043a\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0445 \u00abpartial\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044e \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0438\u0442\u044c \u0444\u0430\u0439\u043b Example1.aspx \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u0430\u0439\u043b Example1.aspx.designer.cs<\/p>\n<pre><code class=\"cs\">public partial class ExamplePage1 : System.Web.UI.Page {   protected global::System.Web.UI.WebControls.Button btnSubmit; }<\/code><\/pre>\n<p>  \u0422.\u0435. \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 ExamplePage1 \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c\u044b\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u043e\u043c (Example1.aspx.cs) \u0438 \u0447\u0430\u0441\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u0435 Example1.aspx.designer.cs \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u043c\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c. \u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0436\u0435 \u044d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043a\u0430\u043a \u043e\u0434\u0438\u043d \u043e\u0431\u0449\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 <\/p>\n<pre><code class=\"cs\">public class ExamplePage1 : System.Web.UI.Page, IMyInterface {    protected global::System.Web.UI.WebControls.Button btnSubmit;    protected void btnSubmit_Click(Object sender, EventArgs e)    {     btnSubmit.Color = Color.Red;   } }<\/code><\/pre>\n<p>  \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 IMyInterface, \u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u044d\u0442\u043e \u043a\u043e\u043c\u0431\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u0437 \u0440\u0430\u0437\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f partial \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0430 \u043a\u043b\u0430\u0441\u0441\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0434\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043b\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0430\u0432\u0442\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u043e\u044f \u0438\u0434\u0435\u044f \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0434\u0432\u0443\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u044f\u0437\u044b\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442 \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u044d\u0442\u043e original \u0438 \u0435\u0433\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u044d\u0442\u043e processed \u0438 \u043e\u043d \u0441\u0438\u043c\u0432\u043e\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0431\u044b\u043b\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043e \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u043c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u0430\u044f<\/p>\n<ol>\n<li>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 original \u0432 \u0444\u0430\u0439\u043b\u0435 .cs (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 Example1.cs)<\/li>\n<li>\u041f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u0435\u0441\u043b\u0438 \u043a\u043b\u0430\u0441\u0441 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f, \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 original<\/li>\n<li>\u0415\u0441\u043b\u0438 original \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442, \u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u0442\u0434\u0430\u0451\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0451\u0440\u043d\u044b\u043c \u044f\u0449\u0438\u043a\u043e\u043c \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430).<\/li>\n<li>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0431\u0430\u0437\u0438\u0440\u0443\u044f\u0441\u044c \u043d\u0430 \u043d\u0430\u0431\u043e\u0440\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434 \u0438 \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0444\u0430\u0439\u043b\u044b \u0444\u0430\u0439\u043b\u0430 .processed.cs \u0438 \u0444\u0430\u0439\u043b\u0430 .processed.cs.map (\u0434\u043b\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u043e\u0434\u0430 \u043c\u0435\u0436\u0434\u0443 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 .cs \u0438 \u0444\u0430\u0439\u043b\u0430 .processed.cs, \u0434\u043b\u044f \u043f\u043e\u043c\u043e\u0449\u0438 \u043f\u0440\u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0438 \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 IDE)<\/li>\n<li>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043a\u043e\u0434 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 .processed.cs (\u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e Example1.processed.cs) \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u0443\u0436\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043a\u043e\u0434 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0441\u044f, \u0442\u043e \u0438\u0434\u0451\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0447\u0442\u043e\n<p>  a. \u041a\u043b\u0430\u0441\u0441\u044b \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u043b\u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 original \u0438\u043c\u0435\u044e\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 processed<br \/>   b. \u0421\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u0430 \u044d\u0442\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430 \u043a\u0430\u043a \u0432 \u0444\u0430\u0439\u043b\u0435 .cs \u0442\u0430\u043a \u0438 \u0432 \u0444\u0430\u0439\u043b\u0435 .processed.cs<\/li>\n<li>\u0415\u0441\u043b\u0438 \u0432\u0441\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0442\u043e \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 .processed.cs \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f.<\/li>\n<\/ol>\n<p>  \u0422.\u0435. \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u044d\u0442\u0438 \u0434\u0432\u0430 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430, \u043c\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0437\u044b\u043a\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u043e\u0434\u043e\u0431\u043d\u043e \u0442\u043e\u043c\u0443 \u043a\u0430\u043a partial \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0422.\u0435. parial \u044d\u0442\u043e \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u0431\u0438\u0442\u0438\u0435 \u043a\u043e\u0434\u0430, original\/processed \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435.<\/p>\n<p>  \u041a\u0430\u043a \u043c\u043d\u0435 \u0432\u0438\u0434\u0438\u0442\u0441\u044f, \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 original\/processed \u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435 \u044d\u0442\u043e \u043d\u0435\u0434\u0435\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u043e\u0432 \u0432 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u041c\u0438\u043a\u0440\u043e\u0441\u043e\u0444\u0442 (\u0448\u0443\u0442\u043a\u0430 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u043e \u043e\u043d\u0430 \u043d\u0435 \u0434\u0430\u043b\u0435\u043a\u0430 \u043e\u0442 \u0438\u0441\u0442\u0438\u043d\u044b). \u041f\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0451\u0442\u0443, \u0432 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043d\u0435\u0442\u0443 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439, \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u044d\u0442\u043e \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u044f \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0438 \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>  \u0412 .NET 5 \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u043e\u0432\u0430\u044f \u0444\u0438\u0447\u0430 \u2014 <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/introducing-c-source-generators\/\">\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/a> \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u0436\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u0444\u0430\u0439\u043b\u044b \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u044d\u0442\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u043e\u0432\u044b\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u043d\u043e \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u0441\u0451 \u0435\u0449\u0451 \u0436\u0434\u0451\u043c.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430. \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0444\u0430\u0439\u043b Example2.cs  <\/p>\n<pre><code class=\"cs\">public original class ExamplePage2 : System.Web.UI.Page, IMyInterface {    protected global::System.Web.UI.WebControls.Button btnSubmit;    protected void btnSubmit_Click(Object sender, EventArgs e)    {     btnSubmit.Color = Color.Red;   }\t }<\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044e, \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u043f\u0440\u043e\u0448\u043b\u043e \u043e\u043a \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0438\u0434\u0438\u0442 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 original, \u0442\u043e \u043e\u0442\u0434\u0430\u0451\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0443 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0444\u0430\u0439\u043b Example2.processed.cs (\u0432 \u0441\u0430\u043c\u043e\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0442\u043e\u0447\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f Example2.cs \u0441 \u0437\u0430\u043c\u0435\u043d\u0451\u043d\u043d\u044b\u043c original \u043d\u0430 processed). <\/p>\n<p>  \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0430\u0441\u043f\u0435\u043a\u0442 \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043a\u0430\u043a:  <\/p>\n<pre><code class=\"cs\">public processed class ExamplePage2 : System.Web.UI.Page, IMyInterface {    protected global::System.Web.UI.WebControls.Button btnSubmit;    protected void btnSubmit_Click(Object sender, EventArgs e)    {     try     {       btnSubmit.Color = Color.Red;     }      catch(Exception ex)     {       ErrorLog(ex);       throw;     }      SuccessLog();   }\t    private static processed ErrorLog(Exception ex)   {     \/\/ some error logic here   }    private static processed SuccessLog([System.Runtime.CompilerServices.CallerMemberName] string memberName = &quot;&quot;)   {     \/\/ some success logic here   } }<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433, \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440. _\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435_ \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440\u044b \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u044b \u0438 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u0443\u0441\u043b\u043e\u0432\u0438\u044e \u0447\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0432 original \u0438 processed \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b.<\/p>\n<p>  \u0412 \u044d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u044d\u0442\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 processed \u0434\u043b\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438 \u043f\u043e\u043b\u0435\u0439.<\/p>\n<p>  \u041e\u043d \u043f\u043e\u043c\u0435\u0447\u0430\u0435\u0442 \u043c\u0435\u0442\u043e\u0434\u044b, \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438 \u043f\u043e\u043b\u044f \u043a\u0430\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u0430\u0441\u0441\u0430\u043c \u0441 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c processed \u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441\u0438\u0433\u043d\u0430\u0442\u0443\u0440. \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u043e\u0431\u0449\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0438\u0437\u043b\u0438\u0448\u043d\u044e\u044e \u0438\u0437\u0431\u044b\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043b \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438 \u0435\u0441\u043b\u0438 \u0432\u0441\u0451 \u043e\u043a, \u0442\u043e \u0432\u0437\u044f\u043b \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430.<\/p>\n<p>  \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u0434\u0451\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u0435 \u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043e\u0431\u0430 original \u0438 partial \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430), \u043d\u043e \u044d\u0442\u043e \u043d\u0435 \u043d\u0435\u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0438\u043c\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c.<\/p>\n<h4>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c IDE \u0432 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 <\/h4>\n<p>  \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u0444\u0430\u0439\u043b\u043e\u0432 .processed.cs \u0432 IDE \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0432 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 original\/processed \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0439 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f IDE (\u0441 \u043c\u043e\u0435\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f) \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0449\u044c \u0432 \u0447\u0442\u0435\u043d\u0438\u0438 \u043a\u043e\u0434\u0430 processed \u043a\u043b\u0430\u0441\u0441\u043e\u0432. Processed \u043a\u043b\u0430\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0447\u0430\u0441\u0442\u0435\u0439 \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u043c\u0438. \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0445\u043e\u0436\u0430 \u043d\u0430 \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044e \u0441\u043b\u043e\u0451\u0432 \u0432 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0430\u043c \u0441\u0430\u043c\u044b\u043c \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0446\u0435\u043b\u0438. \u041d\u0430\u0448 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043f\u043b\u0430\u0433\u0438\u043d \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u0435\u0447\u0442\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0438 \u0440\u0435\u0430\u043a\u0446\u0438\u044f \u0435\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u0430.<\/p>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0430 \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044e AOP \u0432 \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u0443\u044e \u0436\u0438\u0437\u043d\u044c, \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c refactoring, \u0442.\u0435. \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u044b\u0434\u0435\u043b\u0438\u0432 \u0447\u0430\u0441\u0442\u044c \u043a\u043e\u0434\u0430 \u043c\u043e\u0433 \u0431\u044b \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u00abExtract To AOP Template\u00bb \u0438 IDE \u0441\u043e\u0437\u0434\u0430\u043b\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0430 \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438 \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0432 \u043a\u043e\u0434 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u043b\u0430 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u043e\u0432 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0438\u0437 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. <\/p>\n<p>  \u041d\u0443 \u0438 \u0432\u0438\u0448\u0435\u043d\u043a\u043e\u0439 \u043d\u0430 \u0442\u043e\u0440\u0442\u0435 \u0431\u044b\u043b\u0430 \u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0430\u043a\u0441\u043f\u0435\u043a\u0442\u0430 \u043d\u0430 \u043a\u043b\u0430\u0441\u0441\/\u043c\u0435\u0442\u043e\u0434 \u043f\u043e \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u044b\u0431\u043e\u0440\u0443, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0446\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0430 \u043b\u0435\u0442\u0443, \u0431\u0435\u0437 \u044f\u0432\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0441 \u0432\u0430\u0448\u0435\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b.<\/p>\n<p>  \u042f \u0443\u0432\u0435\u0440\u0435\u043d, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0437\u0430 \u0434\u0435\u043b\u043e\u0432 \u0432\u043e\u0437\u044c\u043c\u0443\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u0438 \u0440\u0435\u0448\u0430\u0440\u043f\u0435\u0440\u0430, \u0442\u043e \u043c\u0430\u0433\u0438\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0430.<\/p>\n<h4>\u041d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0430\u0441\u043f\u0435\u043a\u0442\u0430 \u0432 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0444\u0440\u0430\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0422\u0420\u0418\u0417, \u0442\u043e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432, \u044d\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f.<\/p>\n<p>  \u0412 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u043c\u044b \u0431\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0441\u0430\u043c\u043e\u0433\u043e \u0430\u0441\u043f\u0435\u043a\u0442\u0430, \u0431\u0435\u0437 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u0443\u0441\u0438\u043b\u0438\u0439 \u043d\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u044d\u0442\u043e\u0439 \u0446\u0435\u043b\u0438. \u0418 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0431\u044b\u043b \u0431\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e \u0441\u0430\u043c\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0435 \u0436\u0435\u043b\u0430\u043d\u0438\u0435, \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u043c\u0435\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0439 plug&amp;play, \u0442.\u0435. \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u0448\u0430\u0431\u043b\u043e\u043d, \u043d\u0430\u043c \u0431\u044b \u043d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u0435\u0440\u0448\u0430\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0448\u0430\u0433\u0438, \u0434\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043c\u043e\u0433 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u041d\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043e\u0442\u043b\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u0442.\u043f. \u0410 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043e\u043f\u0446\u0438\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438. <\/p>\n<p>  \u0421\u043e\u0437\u0434\u0430\u0432 \u0448\u0430\u0431\u043b\u043e\u043d \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u043f\u0430\u0440\u0443 \u0441\u0442\u0440\u043e\u043a, \u044f \u0441\u0440\u0430\u0437\u0443 \u0431\u044b \u0432\u0438\u0434\u0435\u043b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043e\u0448\u0438\u0431\u043a\u0438, \u0438\u0445 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430 \u0431\u044b\u043b\u0438 \u0431\u044b \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u0430, \u0430 \u043d\u0435 \u0431\u044b\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u0438\u043b\u0438\u0439 \u043e\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430. <\/p>\n<p>  \u041d\u0443 \u0438 \u0447\u0442\u043e\u0431\u044b \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0431\u044b\u043b \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043b\u0438\u0436\u0435 \u043a \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u0443 \u044f\u0437\u044b\u043a\u0430 \u0421#, \u0432 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u0438\u043d\u043e\u0440\u043d\u0430\u044f \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430, \u043f\u043b\u044e\u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u0441\u043b\u043e\u0432 \u0438 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440\u043e\u0432.<\/p>\n<h3>\u041d\u0430\u0448\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f<\/h3>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u043c\u044b \u0436\u0438\u0432\u0451\u043c \u043d\u0435 \u0432 \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u044b \u0438 \u0435\u0437\u0434\u0438\u0442\u044c \u043d\u0430 \u043d\u0438\u0445.<\/p>\n<h4>\u0412\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u043a\u043e\u0434\u0430, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0430<\/h4>\n<p>  \u041d\u0430\u0448\u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0434\u0432\u0443\u0445 \u043a\u043e\u043f\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041e\u0434\u043d\u0430 \u044d\u0442\u043e \u0438\u0441\u0445\u043e\u0434\u043d\u0430\u044f, \u0442\u0430 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0432\u0442\u043e\u0440\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  \u0421\u0446\u0435\u043d\u0430\u0440\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439<\/p>\n<ul>\n<li>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u043a\u043e\u0434\u0430, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043b\u043e\u0433\u0438\u043a\u0443, \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u0438 \u0442.\u043f.<\/li>\n<li>\u041a\u043e\u0433\u0434\u0430 \u043e\u043d \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u0451\u043d \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0438 \u0433\u043e\u0442\u043e\u0432 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0432\u043e\u0435\u0433\u043e \u0442\u0440\u0443\u0434\u0430, \u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u043f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0431\u043e\u0440\u043a\u0438.<\/li>\n<li>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0442\u0438\u043f\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0432\u0435\u0431 \u0441\u0430\u0439\u0442 \u0434\u043b\u044f \u0432\u0435\u0431 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u043b\u0438\u0431\u043e \u0434\u0435\u0441\u043a\u0442\u043e\u043f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e WPF \u043f\u0440\u043e\u0435\u043a\u0442, \u043b\u0438\u0431\u043e \u0430\u0432\u0442\u043e\u0442\u0435\u0441\u0442\u044b \u0438 \u0442.\u043f.<\/li>\n<\/ul>\n<p>  \u0414\u043b\u044f \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u0442\u043e\u0440\u0430\u044f \u043a\u043e\u043f\u0438\u044f IDE, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043f\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0438 \u043e\u043d \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043a\u043e\u043f\u0438\u0435\u0439 \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f. <\/p>\n<p>  \u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0434\u0438\u0441\u0446\u0438\u043f\u043b\u0438\u043d\u044b, \u043d\u043e \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442 \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0430 \u0438 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u0438\u043b\u0434 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438 \u0434\u0435\u043f\u043b\u043e\u0438\u0442\u044c \u043d\u0430 \u0443\u0434\u0430\u043b\u0451\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u043e\u0439). \u041f\u043b\u044e\u0441 \u043f\u043e\u043c\u043e\u0449\u044c \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u044b \u043f\u043b\u0430\u0433\u0438\u043d\u0430 \u0432 VisualStudio \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441.<\/p>\n<h4>IDE<\/h4>\n<p>  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u043b\u0430\u0433\u0438\u043d \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0442\u043e\u0447\u0435\u043d \u043f\u043e\u0434 \u043d\u0430\u0448\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u044b \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043c\u0430\u043b\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0435\u0433\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e \u0441\u043b\u043e\u0451\u0432, \u0432 \u0441\u0442\u0438\u043b\u0435 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u043c\u0443 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0443 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043a\u0440\u044b\u0432\u0430\u0442\u044c\/\u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432, \u043f\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u0438 \u0432\u0438\u0434\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b), \u0440\u0435\u0433\u0438\u043e\u043d\u0430\u043c. \u0412\u043d\u0435\u0434\u0440\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043e\u0431\u0440\u0430\u043c\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0430 \u0438 \u043e\u043d\u0438 \u0442\u0430\u043a\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u043e\u0439.<\/p>\n<p>  \u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u044d\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c diff \u043c\u0435\u0436\u0434\u0443 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u043e\u043c. \u0442\u0430\u043a \u043a\u0430\u043a IDE \u0437\u043d\u0430\u0435\u0442 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u043e\u043f\u0438\u0438 \u0444\u0430\u0439\u043b\u0430 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435, \u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u0441\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438 \u0444\u0430\u0439\u043b\u0430\u043c\u0438.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043f\u043b\u0430\u0433\u0438\u043d \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u043f\u0440\u0438 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u0432\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0441\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043a\u043e\u043f\u0438\u044e (\u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u0442\u0435\u0440\u044f\u0442\u044c \u0438\u0445 \u043f\u0440\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0435\u0440\u0435\u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438)<\/p>\n<h4>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/h4>\n<p>  \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0442.\u0435. \u043a \u043a\u0430\u043a\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0430\u043c \u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.<\/p>\n<p>  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0440\u043e\u0432\u043d\u0435\u0439.<\/p>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u044d\u0442\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0437\u0430\u0434\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0443\u0442\u0438 \u043d\u0430 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u0432 \u0438\u043c\u0435\u043d\u0438 \u0444\u0430\u0439\u043b\u043e\u0432, \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043e\u0431\u043b\u0430\u0441\u0442\u0435\u0439 \u0432\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u043b\u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432.<\/p>\n<p>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u044d\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0438\u043b\u0438 \u043f\u043e\u043b\u0435\u0439.<\/p>\n<p>  \u0422\u0440\u0435\u0442\u0438\u0439 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u043b\u043e\u043a\u0430 \u043a\u043e\u0434\u0430 \u0438 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u044b\u0439 \u044d\u0442\u043e \u044f\u0432\u043d\u043e\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0432 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0435 \u043c\u0435\u0441\u0442\u043e \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435.<\/p>\n<h4>\u0428\u0430\u0431\u043b\u043e\u043d\u044b<\/h4>\n<p>  \u0418\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043b\u043e\u0436\u0438\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u0434\u043b\u044f \u0446\u0435\u043b\u0435\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 T4, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043f\u043e\u043b\u043d\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0436\u0435 \u043f\u043e\u0434\u0445\u043e\u0434 \u0438 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u0428\u0430\u0431\u043b\u043e\u043d\u044b T4 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 C#, \u0438\u043c\u0435\u044e\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u043e\u0432\u0435\u0440\u0445\u044d\u0434 \u0438 \u0445\u043e\u0440\u043e\u0448\u0443\u044e \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c.<\/p>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0445 \u043a\u0442\u043e \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 T4, \u0441\u0430\u043c\u044b\u043c \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c ASPX \u0444\u043e\u0440\u043c\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043c\u0435\u0441\u0442\u043e HTML \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 C# \u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 IIS, \u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u043e\u0439 \u0441 \u0432\u044b\u0432\u043e\u0434\u043e\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c (\u0438\u043b\u0438 \u0432 \u0444\u0430\u0439\u043b). <\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440\u044b <\/h3>\n<p>  \u0414\u043b\u044f \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u043a\u0430\u043a \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0434\u043e \u0438 \u043f\u043e\u0441\u043b\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. \u042f \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e \u0441\u0430\u043c\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b, \u043d\u043e \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0448\u0438\u043c \u0432\u043e\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043f\u0435\u0440\u0435\u0434 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/ ##aspect=AutoComment  using AOP.Common; using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.IO; using System.Linq;  namespace Aspectimum.Demo.Lib {      [AopTemplate(&quot;ClassLevelTemplateForMethods&quot;, NameFilter = &quot;First&quot;)]     [AopTemplate(&quot;StaticAnalyzer&quot;, Action = AopTemplateAction.Classes)]     [AopTemplate(&quot;DependencyInjection&quot;, AdvicePriority = 500, Action = AopTemplateAction.PostProcessingClasses)]     [AopTemplate(&quot;ResourceReplacer&quot;, AdvicePriority = 1000, ExtraTag = &quot;ResourceFile=Demo.resx,ResourceClass=Demo&quot;, Action = AopTemplateAction.PostProcessingClasses)]     public class ConsoleDemo     {         public virtual Person FirstDemo(string firstName, string lastName, int age)         {             Console.Out.WriteLine(&quot;FirstDemo: 1&quot;);              \/\/ ##aspect=&quot;FirstDemoComment&quot; extra data here              return new Person()             {                 FirstName = firstName,                 LastName = lastName,                 Age = age,             };         }          private static IConfigurationRoot _configuration = inject;         private IDataService _service { get; } = inject;         private Person _somePerson = inject;          [AopTemplate(&quot;LogExceptionMethod&quot;)]         [AopTemplate(&quot;StopWatchMethod&quot;)]         [AopTemplate(&quot;MethodFinallyDemo&quot;, AdvicePriority = 100)]         public Customer[] SecondDemo(Person[] people)         {             IEnumerable&lt;Customer&gt; Customers;              Console.Out.WriteLine(&quot;SecondDemo: 1&quot;);              Console.Out.WriteLine(i18(&quot;SecondDemo: i18&quot;));              int configDelayMS = inject;             string configServerName = inject;              using (new AopTemplate(&quot;SecondDemoUsing&quot;, extraTag: &quot;test extra&quot;))             {                  Customers = people.Select(s =&gt; new Customer()                 {                     FirstName = s.FirstName,                     LastName = s.LastName,                     Age = s.Age,                     Id = s.Id                 });                  _service.Init(Customers);                  foreach (var customer in Customers)                 {                     Console.Out.WriteLine(i18($&quot;First Name {customer.FirstName} Last Name {customer.LastName}&quot;));                     Console.Out.WriteLine(&quot;SecondDemo: 2 &quot; + i18(&quot;First Name &quot;) + customer.FirstName + i18(&quot; Last Name   &quot;) + customer.LastName);                 }             }              Console.Out.WriteLine(i18(String.Format(&quot;SecondDemo: {0}&quot;, &quot;3&quot;)));             Console.Out.WriteLine($&quot;Server {configServerName} default delay {configDelayMS}&quot;);             Console.Out.WriteLine($&quot;Customer for ID=5 is {_service.GetCustomerName(5)}&quot;);              return Customers.ToArray();         }          protected static string i18(string s) =&gt; s;         protected static dynamic inject;          [AopTemplate(&quot;NotifyPropertyChangedClass&quot;, Action = AopTemplateAction.Classes)]         [AopTemplate(&quot;NotifyPropertyChanged&quot;, Action = AopTemplateAction.Properties)]         public class Person         {             [AopTemplate(&quot;CacheProperty&quot;, extraTag: &quot;{ \\&quot;CacheKey\\&quot;: \\&quot;name_of_cache_key\\&quot;, \\&quot;ExpiresInMinutes\\&quot;: 10 }&quot;)]             public string FullName             {                 get                 {                     \/\/ ##aspect=&quot;FullNameComment&quot; extra data here                     return $&quot;{FirstName} {LastName}&quot;;                 }             }              public int Id { get; set; }             public string FirstName { get; set; }             public string LastName { get; set; }             public int Age { get; set; }         }          [AopTemplate(&quot;NotifyPropertyChanged&quot;, Action = AopTemplateAction.Properties)]         public class Customer : Person         {             public double CreditScore { get; set; }         }          public interface IDataService         {             void Init(IEnumerable&lt;Customer&gt; customers);             string GetCustomerName(int customerId);         }          public class DataService: IDataService         {             private IEnumerable&lt;Customer&gt; _customers;             public void Init(IEnumerable&lt;Customer&gt; customers)             {                 _customers = customers;             }              public string GetCustomerName(int customerId)             {                 return _customers.FirstOrDefault(w =&gt; w.Id == customerId)?.FullName;             }         }          public class MockDataService : IDataService         {             private IEnumerable&lt;Customer&gt; _customers;             public void Init(IEnumerable&lt;Customer&gt; customers)             {                 if(customers == null)                     throw (new Exception(&quot;IDataService.Init(customers == null)&quot;));             }              public string GetCustomerName(int customerId)             {                 if (customerId &lt; 0)                     throw (new Exception(&quot;IDataService.GetCustomerName: customerId cannot be negative&quot;));                  if (customerId == 0)                     throw (new Exception(&quot;IDataService.GetCustomerName: customerId cannot be zero&quot;));                  return $&quot;FirstName{customerId} LastName{customerId}&quot;;             }         }     } } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u043e\u0441\u043b\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/------------------------------------------------------------------------------ \/\/ &lt;auto-generated&gt;  \/\/     This code was generated from a template. \/\/  \/\/     Manual changes to this file may cause unexpected behavior in your application. \/\/     Manual changes to this file will be overwritten if the code is regenerated. \/\/ \/\/  Generated base on file: ConsoleDemo.cs \/\/  ##sha256: ekmmxFSeH5ev8Epvl7QvDL+D77DHwq1gHDnCxzeBWcw \/\/  Created By: JohnSmith \/\/  Created Machine: 127.0.0.1 \/\/  Created At: 2020-09-19T23:18:07.2061273-04:00 \/\/ \/\/ &lt;\/auto-generated&gt; \/\/------------------------------------------------------------------------------ using Microsoft.Extensions.Configuration; using System; using System.Collections.Generic; using System.ComponentModel; using System.IO; using System.Linq;  namespace Aspectimum.Demo.Lib {     public class ConsoleDemo     {         public virtual Person FirstDemo(string firstName, string lastName, int age)         {             Console.Out.WriteLine(&quot;FirstDemo: 1&quot;);             \/\/ FirstDemoComment replacement extra data here             return new Person()             {FirstName = firstName, LastName = lastName, Age = age, };         }          private static IConfigurationRoot _configuration = new ConfigurationBuilder()             .SetBasePath(System.IO.Path.Combine(AppContext.BaseDirectory))             .AddJsonFile(&quot;appsettings.json&quot;, optional: true)             .Build();                  private IDataService _service { get; } = new DataService();  #error Cannot find injection rule for Person _somePerson         private Person _somePerson = inject;          public Customer[] SecondDemo(Person[] people)         {             try             { #error variable &quot;Customers&quot; doesn't match code standard rules                 IEnumerable&lt;Customer&gt; Customers;                                  Console.Out.WriteLine(&quot;SecondDemo: 1&quot;);  #error Cannot find resource for a string &quot;SecondDemo: i18&quot;, please add it to resources                 Console.Out.WriteLine(i18(&quot;SecondDemo: i18&quot;));                  int configDelayMS = Int32.Parse(_configuration[&quot;delay_ms&quot;]);                 string configServerName = _configuration[&quot;server_name&quot;];                 {                     \/\/ second demo test extra                     {                         Customers = people.Select(s =&gt; new Customer()                         {FirstName = s.FirstName, LastName = s.LastName, Age = s.Age, Id = s.Id});                         _service.Init(Customers);                         foreach (var customer in Customers)                         {                             Console.Out.WriteLine(String.Format(Demo.First_Last_Names_Formatted, customer.FirstName, customer.LastName));                             Console.Out.WriteLine(&quot;SecondDemo: 2 &quot; + (Demo.First_Name + &quot; &quot;) + customer.FirstName + (&quot; &quot; + Demo.Last_Name + &quot;   &quot;) + customer.LastName);                         }                     }                 }  #error Argument for i18 method must be either string literal or interpolated string, but instead got Microsoft.CodeAnalysis.CSharp.Syntax.InvocationExpressionSyntax #warning Please replace String.Format with string interpolation format.                 Console.Out.WriteLine(i18(String.Format(&quot;SecondDemo: {0}&quot;, &quot;3&quot;)));                 Console.Out.WriteLine($&quot;Server {configServerName} default delay {configDelayMS}&quot;);                 Console.Out.WriteLine($&quot;Customer for ID=5 is {_service.GetCustomerName(5)}&quot;);                  return Customers.ToArray();             }             catch (Exception logExpn)             {                 Console.Error.WriteLine($&quot;Exception in SecondDemo\\r\\n{logExpn.Message}\\r\\n{logExpn.StackTrace}&quot;);                 throw;             }         }          protected static string i18(string s) =&gt; s;         protected static dynamic inject;         public class Person : System.ComponentModel.INotifyPropertyChanged         {             public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;             protected void NotifyPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = &quot;&quot;)             {                 PropertyChanged?.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));             }              public string FullName             {                 get                 {                     System.Runtime.Caching.ObjectCache cache = System.Runtime.Caching.MemoryCache.Default;                     string cachedData = cache[&quot;name_of_cache_key&quot;] as string;                     if (cachedData == null)                     {                         cachedData = GetPropertyData();                         if (cachedData != null)                         {                             cache.Set(&quot;name_of_cache_key&quot;, cachedData, System.DateTimeOffset.Now.AddMinutes(10));                         }                     }                      return cachedData;                     string GetPropertyData()                     {                         \/\/ FullNameComment FullName                         return $&quot;{FirstName} {LastName}&quot;;                     }                 }             }              private int _id;             public int Id             {                 get                 {                     return _id;                 }                  set                 {                     if (_id != value)                     {                         _id = value;                         NotifyPropertyChanged();                     }                 }             }              private string _firstName;             public string FirstName             {                 get                 {                     return _firstName;                 }                  set                 {                     if (_firstName != value)                     {                         _firstName = value;                         NotifyPropertyChanged();                     }                 }             }              private string _lastName;             public string LastName             {                 get                 {                     return _lastName;                 }                  set                 {                     if (_lastName != value)                     {                         _lastName = value;                         NotifyPropertyChanged();                     }                 }             }              private int _age;             public int Age             {                 get                 {                     return _age;                 }                  set                 {                     if (_age != value)                     {                         _age = value;                         NotifyPropertyChanged();                     }                 }             }         }          public class Customer : Person         {             private double _creditScore;             public double CreditScore             {                 get                 {                     return _creditScore;                 }                  set                 {                     if (_creditScore != value)                     {                         _creditScore = value;                         NotifyPropertyChanged();                     }                 }             }         }          public interface IDataService         {             void Init(IEnumerable&lt;Customer&gt; customers);             string GetCustomerName(int customerId);         }          public class DataService : IDataService         {             private IEnumerable&lt;Customer&gt; _customers;             public void Init(IEnumerable&lt;Customer&gt; customers)             {                 _customers = customers;             }              public string GetCustomerName(int customerId)             {                 return _customers.FirstOrDefault(w =&gt; w.Id == customerId)?.FullName;             }         }          public class MockDataService : IDataService         {             private IEnumerable&lt;Customer&gt; _customers;             public void Init(IEnumerable&lt;Customer&gt; customers)             {                 if (customers == null)                     throw (new Exception(&quot;IDataService.Init(customers == null)&quot;));             }              public string GetCustomerName(int customerId)             {                 if (customerId &lt; 0)                     throw (new Exception(&quot;IDataService.GetCustomerName: customerId cannot be negative&quot;));                 if (customerId == 0)                     throw (new Exception(&quot;IDataService.GetCustomerName: customerId cannot be zero&quot;));                 return $&quot;FirstName{customerId} LastName{customerId}&quot;;             }         }     } }  \/\/ ##template=AutoComment sha256=Qz6vshTZl2\/u+NgtcV4u5W5RZMb9JPkJ2Zj0yvQBH9w \/\/ ##template=AopCsharp.ttinclude sha256=2QR7LE4yvfWYNl+JVKQzvEBwcWvReeupVpslWTSWQ0c \/\/ ##template=FirstDemoComment sha256=eIleHCim5r9F\/33Mv9B7pcNQ\/dlfEhDVXJVhA7+3OgY \/\/ ##template=FullNameComment sha256=2\/Ipn8fk2y+o\/FVQHAWnrOlhqS5ka204YctZkwl\/CUs \/\/ ##template=NotifyPropertyChangedClass sha256=sxRrSjUSrynQSPjo85tmQywQ7K4fXFR7nN2mX87fCnk \/\/ ##template=StaticAnalyzer sha256=zmJsj\/FWmjqDDnpZXhoAxQB61nYujd41ILaQ4whcHyY \/\/ ##template=LogExceptionMethod sha256=+zTre3r3LR9dm+bLPEEXg6u2OtjFg+\/V6aCnJKijfcg \/\/ ##template=NotifyPropertyChanged sha256=PMgorLSwEChpIPnEWXfEuUzUm4GO\/6pMmoJdF7qcgn8 \/\/ ##template=CacheProperty sha256=oktDGTfC2hHoqpbKkeNABQaPdq6SrVLRFEQdNMoY4zE \/\/ ##template=DependencyInjection sha256=nPq\/ZxVBpgrDzyH+uLtJvD1aKbajKinX\/DUBQ4BGG9g \/\/ ##template=ResourceReplacer sha256=ZyUljjKKj0jLlM2nUIr1oJc1L7otYUI8WqWN7um6NxI  <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<h4>\u041f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u044f \u0438 \u043a\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432<\/h4>\n<p>  \u0428\u0430\u0431\u043b\u043e\u043d AutoComment<\/p>\n<pre><code class=\"cs\">\/\/ ##aspect=AutoComment<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043c\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d (\u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e AutoComment) \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0438\u0441\u043a\u043b\u0430\u0439\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430 \u0447\u0442\u043e \u043a\u043e\u0434 \u0432 \u044d\u0442\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u044d\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u044d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e.<\/p>\n<p>  \u041a\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 AutoComment.t4<\/p>\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt;  \/\/------------------------------------------------------------------------------ \/\/ &lt;auto-generated&gt;  \/\/     This code was generated from a template. \/\/  \/\/     Manual changes to this file may cause unexpected behavior in your application. \/\/     Manual changes to this file will be overwritten if the code is regenerated. \/\/ \/\/  Generated base on file: &lt;#= FileName #&gt; \/\/  ##sha256: &lt;#= FileSha256 #&gt; \/\/  Created By: &lt;#= User #&gt; \/\/  Created Machine: &lt;#= MachineName #&gt; \/\/  Created At: &lt;#= Now #&gt; \/\/ \/\/ &lt;\/auto-generated&gt; \/\/------------------------------------------------------------------------------ <\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 FileName, FileSha256, User, MachineName \u0438 Now \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u0448\u0430\u0431\u043b\u043e\u043d \u0438\u0437 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438<\/p>\n<pre><code class=\"cs\">\/\/------------------------------------------------------------------------------ \/\/ &lt;auto-generated&gt;  \/\/     This code was generated from a template. \/\/  \/\/     Manual changes to this file may cause unexpected behavior in your application. \/\/     Manual changes to this file will be overwritten if the code is regenerated. \/\/ \/\/  Generated base on file: ConsoleDemo.cs \/\/  ##sha256: PV3lHNDftTzVYnzNCZbKvtHCbscT0uIcHGRR\/NJFx20 \/\/  Created By: EuGenie \/\/  Created Machine: 192.168.0.1 \/\/  Created At: 2017-12-09T14:49:26.7173975-05:00 \/\/ \/\/ &lt;\/auto-generated&gt; \/\/------------------------------------------------------------------------------ <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u043a\u043b\u0430\u0441\u0441\u0430<\/p>\n<p>  [AopTemplate(\u00abClassLevelTemplateForMethods\u00bb, NameFilter=\u00abFirst\u00bb)]<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0447\u0442\u043e \u0448\u0430\u0431\u043b\u043e\u043d \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e \u0432\u0441\u0435\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c \u043a\u043b\u0430\u0441\u0441\u0430, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c \u0441\u043b\u043e\u0432\u043e \u00abFirst\u00bb. \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 NameFilter \u044d\u0442\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0434\u043b\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e.<\/p>\n<p>  \u041a\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 ClassLevelTemplateForMethods.t4<\/p>\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt;  \/\/ class level template &lt;#= MethodStart() #&gt;&lt;#= MethodBody() #&gt;&lt;#= MethodEnd() #&gt; <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 <code>\/\/ class level template<\/code> \u043f\u0435\u0440\u0435\u0434 \u043a\u043e\u0434\u043e\u043c \u043c\u0435\u0442\u043e\u0434\u0430<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 <\/p>\n<pre><code class=\"cs\">\/\/ class level template public virtual Person FirstDemo(string firstName, string lastName, int age) {   Console.Out.WriteLine(&quot;FirstDemo: 1&quot;);    \/\/ ##aspect=&quot;FirstDemoComment&quot; extra data here    return new Person()       {         FirstName = firstName,         LastName = lastName,         Age = age,       }; } <\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u043c\u0435\u0442\u043e\u0434\u0430, \u0434\u043b\u044f \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u043a \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u043c\u0435\u0442\u043e\u0434\u0443.<\/p>\n<p>  <code>[AopTemplate(&quot;LogExceptionMethod&quot;)]<br \/>  [AopTemplate(&quot;StopWatchMethod&quot;)]<br \/>  [AopTemplate(&quot;MethodFinallyDemo&quot;, AdvicePriority = 100)]<\/code><\/p>\n<p>  \u0428\u0430\u0431\u043b\u043e\u043d LogExceptionMethod.t4  <\/p>\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt; &lt;# EnsureUsing(&quot;System&quot;); #&gt; &lt;#= MethodStart() #&gt; try { &lt;#= MethodBody() #&gt; }  catch(Exception logExpn) { \tConsole.Error.WriteLine($&quot;Exception in &lt;#= MethodName #&gt;\\r\\n{logExpn.Message}\\r\\n{logExpn.StackTrace}&quot;); \tthrow; }  &lt;#= MethodEnd() #&gt; <\/code><\/pre>\n<p>  \u0428\u0430\u0431\u043b\u043e\u043d StopWatchMethod.t4  <\/p>\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt; &lt;# EnsureUsing(&quot;System.Diagnostics&quot;); #&gt; &lt;#= MethodStart() #&gt;  var stopwatch = Stopwatch.StartNew();   try { &lt;#= MethodBody() #&gt; }  finally { \tstopwatch.Stop(); \tConsole.Out.WriteLine($&quot;Method &lt;#= MethodName #&gt;: {stopwatch.ElapsedMilliseconds}&quot;);  }  &lt;#= MethodEnd() #&gt; <\/code><\/pre>\n<p>  \u0428\u0430\u0431\u043b\u043e\u043d MethodFinallyDemo.t4  <\/p>\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt;  &lt;#= MethodStart() #&gt; try { &lt;#= MethodBody() #&gt; }  finally  { \t\/\/ whatever logic you need to include for a method }  &lt;#= MethodEnd() #&gt; <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0439  <\/p>\n<pre><code class=\"cs\">public Customer[] SecondDemo(Person[] people) {     try     {         var stopwatch = Stopwatch.StartNew();         try         {             try             {                 IEnumerable&lt;Customer&gt; customers;                 Console.Out.WriteLine(&quot;SecondDemo: 1&quot;);                 {                     \/\/ second demo test extra                     {                         customers = people.Select(s =&gt; new Customer()                         {FirstName = s.FirstName, LastName = s.LastName, Age = s.Age, });                         foreach (var customer in customers)                         {                             Console.Out.WriteLine($&quot;SecondDemo: 2 {customer.FirstName} {customer.LastName}&quot;);                         }                     }                 }                  Console.Out.WriteLine(&quot;SecondDemo: 3&quot;);                 return customers.ToArray();             }             catch (Exception logExpn)             {                 Console.Error.WriteLine($&quot;Exception in SecondDemo\\r\\n{logExpn.Message}\\r\\n{logExpn.StackTrace}&quot;);                 throw;             }         }         finally         {             stopwatch.Stop();             Console.Out.WriteLine($&quot;Method SecondDemo: {stopwatch.ElapsedMilliseconds}&quot;);         }     }     finally     {     \/\/ whatever logic you need to include for a method     } }<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0434\u043b\u044f \u0431\u043b\u043e\u043a\u0430 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0432 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e using<\/p>\n<pre><code class=\"cs\">using (new AopTemplate(&quot;SecondDemoUsing&quot;, extraTag: &quot;test extra&quot;)) {     customers = people.Select(s =&gt; new Customer()     {         FirstName = s.FirstName,         LastName = s.LastName,         Age = s.Age,     });      foreach (var customer in customers)     {         Console.Out.WriteLine($&quot;SecondDemo: 2 {customer.FirstName} {customer.LastName}&quot;);     } } <\/code><\/pre>\n<p>  \u0428\u0430\u0431\u043b\u043e\u043d SecondDemoUsing.t4  <\/p>\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt;  \/\/ second demo &lt;#= ExtraTag #&gt;  &lt;#= StatementBody() #&gt;<\/code><\/pre>\n<p>  ExtraTag \u044d\u0442\u043e \u0441\u0442\u0440\u043e\u043a\u0430 \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0432 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0435. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0434\u043b\u044f \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u043b\u0435\u0433\u043a\u0430 \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. <\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438<\/p>\n<pre><code class=\"cs\">{   \/\/ second demo test extra   {       customers = people.Select(s =&gt; new Customer()       {FirstName = s.FirstName, LastName = s.LastName, Age = s.Age, });       foreach (var customer in customers)       {           Console.Out.WriteLine($&quot;SecondDemo: 2 {customer.FirstName} {customer.LastName}&quot;);       }   } }<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430<\/p>\n<p>  <code>[AopTemplate(&quot;NotifyPropertyChangedClass&quot;, Action = AopTemplaceAction.Classes)]<br \/>  [AopTemplate(&quot;NotifyPropertyChanged&quot;, Action = AopTemplaceAction.Properties)]<\/code><\/p>\n<p>  NotifyPropertyChanged \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0440\u044f\u0434\u0443 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u043b\u043e\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0430\u0441\u043f\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0431\u043b\u043e\u043d NotifyPropertyChangedClass.t4 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u043a\u043e\u0434\u0443 \u043a\u043b\u0430\u0441\u0441\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt; &lt;# \t\/\/ the class already implements INotifyPropertyChanged, nothing to do here \tif(ImplementsBaseType(ClassNode, &quot;INotifyPropertyChanged&quot;, &quot;System.ComponentModel.INotifyPropertyChanged&quot;)) \t\treturn null;  \tvar classNode = AddBaseTypes&lt;ClassDeclarationSyntax&gt;(ClassNode, &quot;System.ComponentModel.INotifyPropertyChanged&quot;);  #&gt;  &lt;#= ClassStart(classNode) #&gt;             public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;              protected void NotifyPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = &quot;&quot;)             {                 PropertyChanged?.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));             }  &lt;#= ClassBody(classNode) #&gt; &lt;#= ClassEnd(classNode) #&gt;<\/code><\/pre>\n<p>  \u041c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u043a\u0430\u043a \u043f\u043e\u0434\u043e\u0431\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u043f\u043b\u0435\u0442\u0435\u043d\u0438\u0435\u043c \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0430.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f Fogy<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">using Mono.Cecil; using Mono.Cecil.Cil; using Mono.Cecil.Rocks;  public partial class ModuleWeaver {     public void InjectINotifyPropertyChangedInterface(TypeDefinition targetType)     {         targetType.Interfaces.Add(new InterfaceImplementation(PropChangedInterfaceReference));         WeaveEvent(targetType);     }      void WeaveEvent(TypeDefinition type)     {         var propertyChangedFieldDef = new FieldDefinition(&quot;PropertyChanged&quot;, FieldAttributes.Private | FieldAttributes.NotSerialized, PropChangedHandlerReference);         type.Fields.Add(propertyChangedFieldDef);         var propertyChangedField = propertyChangedFieldDef.GetGeneric();          var eventDefinition = new EventDefinition(&quot;PropertyChanged&quot;, EventAttributes.None, PropChangedHandlerReference)             {                 AddMethod = CreateEventMethod(&quot;add_PropertyChanged&quot;, DelegateCombineMethodRef, propertyChangedField),                 RemoveMethod = CreateEventMethod(&quot;remove_PropertyChanged&quot;, DelegateRemoveMethodRef, propertyChangedField)             };          type.Methods.Add(eventDefinition.AddMethod);         type.Methods.Add(eventDefinition.RemoveMethod);         type.Events.Add(eventDefinition);     }      MethodDefinition CreateEventMethod(string methodName, MethodReference delegateMethodReference, FieldReference propertyChangedField)     {         const MethodAttributes Attributes = MethodAttributes.Public |                                             MethodAttributes.HideBySig |                                             MethodAttributes.Final |                                             MethodAttributes.SpecialName |                                             MethodAttributes.NewSlot |                                             MethodAttributes.Virtual;          var method = new MethodDefinition(methodName, Attributes, TypeSystem.VoidReference);          method.Parameters.Add(new ParameterDefinition(&quot;value&quot;, ParameterAttributes.None, PropChangedHandlerReference));         var handlerVariable0 = new VariableDefinition(PropChangedHandlerReference);         method.Body.Variables.Add(handlerVariable0);         var handlerVariable1 = new VariableDefinition(PropChangedHandlerReference);         method.Body.Variables.Add(handlerVariable1);         var handlerVariable2 = new VariableDefinition(PropChangedHandlerReference);         method.Body.Variables.Add(handlerVariable2);          var loopBegin = Instruction.Create(OpCodes.Ldloc, handlerVariable0);         method.Body.Instructions.Append(             Instruction.Create(OpCodes.Ldarg_0),             Instruction.Create(OpCodes.Ldfld, propertyChangedField),             Instruction.Create(OpCodes.Stloc, handlerVariable0),             loopBegin,             Instruction.Create(OpCodes.Stloc, handlerVariable1),             Instruction.Create(OpCodes.Ldloc, handlerVariable1),             Instruction.Create(OpCodes.Ldarg_1),             Instruction.Create(OpCodes.Call, delegateMethodReference),             Instruction.Create(OpCodes.Castclass, PropChangedHandlerReference),             Instruction.Create(OpCodes.Stloc, handlerVariable2),             Instruction.Create(OpCodes.Ldarg_0),             Instruction.Create(OpCodes.Ldflda, propertyChangedField),             Instruction.Create(OpCodes.Ldloc, handlerVariable2),             Instruction.Create(OpCodes.Ldloc, handlerVariable1),             Instruction.Create(OpCodes.Call, InterlockedCompareExchangeForPropChangedHandler),             Instruction.Create(OpCodes.Stloc, handlerVariable0),             Instruction.Create(OpCodes.Ldloc, handlerVariable0),             Instruction.Create(OpCodes.Ldloc, handlerVariable1),             Instruction.Create(OpCodes.Bne_Un_S, loopBegin), \/\/ go to begin of loop             Instruction.Create(OpCodes.Ret));         method.Body.InitLocals = true;         method.Body.OptimizeMacros();          return method;     } }<\/code><\/pre>\n<\/div><\/div>\n<p>  \u0427\u0435\u0441\u0442\u043d\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0443\u0433\u0430\u0435\u0442 \u043d\u0435\u043e\u0444\u0438\u0442\u043e\u0432 AOP \u0432 .Net<\/div>\n<\/p><\/div>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0431\u043b\u043e\u043d NotifyPropertyChanged.t4 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u043a\u043b\u0430\u0441\u0441\u0430<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt; &lt;#  \tif(!(PropertyHasEmptyGetBlock() && PropertyHasEmptySetBlock())) \t\treturn null;  \tstring privateUnqiueName = GetUniquePrivatePropertyName(ClassNode, PropertyNode.Identifier.ToString()); #&gt;  \tprivate &lt;#= PropertyNode.Type.ToFullString() #&gt; &lt;#= privateUnqiueName #&gt;&lt;#= PropertyNode.Initializer != null ? &quot; = &quot; + PropertyNode.Initializer.ToFullString() : &quot;&quot; #&gt;;  &lt;#= PropertyNode.AttributeLists.ToFullString() + PropertyNode.Modifiers.ToFullString() + PropertyNode.Type.ToFullString() + PropertyNode.Identifier.ToFullString() #&gt; \t{ \t\tget { return &lt;#= privateUnqiueName #&gt;; } \t\tset  \t\t{ \t\t\tif(&lt;#= privateUnqiueName #&gt; != value) \t\t\t{ \t\t\t\t&lt;#= privateUnqiueName #&gt; = value; \t\t\t\tNotifyPropertyChanged(); \t\t\t} \t\t} \t}<\/code><\/pre>\n<\/div><\/div>\n<p>  \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u0441\u0432\u043e\u0439\u0441\u0442\u0432  <\/p>\n<pre><code class=\"cs\">public class Person {     public int Id { get; set; }  \/\/ ... } <\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438  <\/p>\n<pre><code class=\"cs\">public class Person : System.ComponentModel.INotifyPropertyChanged {     public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;     protected void NotifyPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = &quot;&quot;)     {         PropertyChanged?.Invoke(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));     }      private int _id;     public int Id     {         get         {             return _id;         }          set         {             if (_id != value)             {                 _id = value;                 NotifyPropertyChanged();             }         }     }  \/\/ ... } <\/code><\/pre>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043b\u044f \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430, \u043e\u043d \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c<\/p>\n<p>  <code>[AopTemplate(&quot;CacheProperty&quot;, extraTag: &quot;{ \\&quot;CacheKey\\&quot;: \\&quot;name_of_cache_key\\&quot;, \\&quot;ExpiresInMinutes\\&quot;: 10 }&quot;)]<\/code><\/p>\n<p>  \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0437\u0430\u0434\u0430\u043d\u044b \u0432 \u0432\u0438\u0434\u0435 JSON. \u041f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u044f\u0432\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0431\u043b\u043e\u043d CacheProperty.t4<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt; &lt;# \t\/\/ The template accepts a configuration value from extraTag in two ways \t\/\/ 1. as a number of minutes to use for expiration (example: 8) \t\/\/ 2. as a string in JSON in format { CacheKey: &quot;name_of_cache_key&quot;, CacheKeyVariable: &quot;name_of_variable&quot;, ExpiresInMinutes: 10, ExpiresVariable: &quot;name_of_variable&quot; } \t\/\/ \t\/\/    CacheKey (optional) name of the cache key, the name will be used as a literal string (example: my_key) \t\/\/    CacheKeyVariable (optional) name of variable that holds the cache key (example: GlobalConsts.MyKeyName) \t\/\/ \t\/\/    ExpiresInMinutes (optional) number minutes that the cache value will expires (example: 12) \t\/\/    ExpiresVariable (optional) name of a variable that the expiration value will be get from (example: AppConfig.EXPIRE_CACHE) \t\/\/ \t\/\/ if any of expiration values are not specified, 5 minutes default expiration will be used  \tif(!PropertyHasAnyGetBlock()) \t\treturn null;  \tconst int DEFAULT_EXPIRES_IN_MINUTES = 5;  \tstring propertyName = PropertyNode.Identifier.ToFullString().Trim(); \tstring propertyType = PropertyNode.Type.ToFullString().Trim(); \tstring expiresInMinutes = DEFAULT_EXPIRES_IN_MINUTES.ToString(); \tstring cacheKey = &quot;\\&quot;&quot; + ClassNode.Identifier.ToFullString() + &quot;:&quot; + propertyName + &quot;\\&quot;&quot;;  \tif(!String.IsNullOrEmpty(ExtraTag)) \t{ \t\tif(Int32.TryParse(ExtraTag, out int exp)) \t\t{ \t\t\texpiresInMinutes = exp.ToString(); \t\t} \t\telse \t\t{ \t\t\tJsonDocument json = ExtraTagAsJson(); \t\t\tif(json != null && json.RootElement.ValueKind  == JsonValueKind.Object) \t\t\t{ \t\t\t\tif(json.RootElement.TryGetProperty(&quot;CacheKey&quot;, out JsonElement cacheKeyElement)) \t\t\t\t{ \t\t\t\t\tstring s = cacheKeyElement.GetString(); \t\t\t\t\tif(!String.IsNullOrEmpty(s)) \t\t\t\t\t\tcacheKey = &quot;\\&quot;&quot; + s + &quot;\\&quot;&quot;; \t\t\t\t} \t\t\t\telse if(json.RootElement.TryGetProperty(&quot;CacheKeyVariable&quot;, out JsonElement cacheVariableElement)) \t\t\t\t{ \t\t\t\t\tstring s = cacheVariableElement.GetString(); \t\t\t\t\tif(!String.IsNullOrEmpty(s)) \t\t\t\t\t\tcacheKey = s; \t\t\t\t}  \t\t\t\tif(json.RootElement.TryGetProperty(&quot;ExpiresInMinutes&quot;, out JsonElement expiresInMinutesElement)) \t\t\t\t{ \t\t\t\t\tif(expiresInMinutesElement.TryGetInt32(out int v) && v &gt; 0) \t\t\t\t\t\texpiresInMinutes = &quot;&quot; + v; \t\t\t\t}  \t\t\t\telse if(json.RootElement.TryGetProperty(&quot;ExpiresVariable&quot;, out JsonElement expiresVariableElement)) \t\t\t\t{\t\t\t\t \t\t\t\t\tstring s = expiresVariableElement.GetString(); \t\t\t\t\tif(!String.IsNullOrEmpty(s)) \t\t\t\t\t\texpiresInMinutes = s; \t\t\t\t} \t\t\t} \t\t} \t}  #&gt;   &lt;#= PropertyDefinition() #&gt; \t{ \t\tget  \t\t{  \t\t\tSystem.Runtime.Caching.ObjectCache cache = System.Runtime.Caching.MemoryCache.Default;\t\t\t  \t\t\t&lt;#= propertyType #&gt; cachedData = cache[&lt;#= cacheKey #&gt;] as &lt;#= propertyType #&gt;; \t\t\tif(cachedData == null) \t\t\t{ \t\t\t\tcachedData = GetPropertyData(); \t\t\t\tif(cachedData != null) \t\t\t\t{\t\t\t\t\t \t\t\t\t\tcache.Set(&lt;#= cacheKey #&gt;, cachedData, System.DateTimeOffset.Now.AddMinutes(&lt;#= expiresInMinutes #&gt;));  \t\t\t\t} \t\t\t}  \t\t\treturn cachedData;  \t\t\t&lt;#= propertyType #&gt; GetPropertyData() \t\t\t{ \t\t\t\t&lt;# if(PropertyNode.ExpressionBody != null ) { #&gt; \t\t\t\treturn (&lt;#= PropertyNode.ExpressionBody.Expression.ToFullString() #&gt;); \t\t\t\t&lt;# } else if(PropertyNode?.AccessorList?.Accessors.FirstOrDefault(w =&gt; w.ExpressionBody != null && w.Keyword.ToString() == &quot;get&quot;) != null) { #&gt; \t\t\t\treturn (&lt;#= PropertyNode?.AccessorList?.Accessors.FirstOrDefault(w =&gt; w.ExpressionBody != null && w.Keyword.ToString() == &quot;get&quot;).ExpressionBody.Expression.ToFullString() #&gt;); \t\t\t\t&lt;# } else { #&gt; \t\t\t\t&lt;#= PropertyGetBlock() #&gt; \t\t\t\t&lt;# } #&gt; \t\t\t}        }  \t\t&lt;# \t\t \t\tif(PropertyHasAnySetBlock()) { #&gt; \t\tset  \t\t{ \t\t\tSystem.Runtime.Caching.ObjectCache cache = System.Runtime.Caching.MemoryCache.Default;    \t\t\tcache.Remove(&lt;#= cacheKey #&gt;); \/\/ invalidate cache for the property\t\t \t\t\t \t\t\t&lt;#= PropertySetBlock() #&gt;\t\t\t \t\t} \t\t&lt;# } #&gt;  \t}<\/code><\/pre>\n<\/div><\/div>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434  <\/p>\n<pre><code class=\"cs\">[AopTemplate(&quot;CacheProperty&quot;, extraTag: &quot;{ \\&quot;CacheKey\\&quot;: \\&quot;name_of_cache_key\\&quot;, \\&quot;ExpiresInMinutes\\&quot;: 10 }&quot;)] public string FullName {     get     {         return $&quot;{FirstName} {LastName}&quot;;     } }<\/code><\/pre>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u043b\u044f CacheProperty.t4  <\/p>\n<pre><code class=\"cs\">public string FullName {     get     {         System.Runtime.Caching.ObjectCache cache = System.Runtime.Caching.MemoryCache.Default;         string cachedData = cache[&quot;name_of_cache_key&quot;] as string;         if (cachedData == null)         {             cachedData = GetPropertyData();             if (cachedData != null)             {                 cache.Set(&quot;name_of_cache_key&quot;, cachedData, System.DateTimeOffset.Now.AddMinutes(10));             }         }          return cachedData;         string GetPropertyData()         {             \/\/ FullNameComment FullName             return $&quot;{FirstName} {LastName}&quot;;         }     } }<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u044b\u0437\u043e\u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043e\u043f\u044f\u0442\u044c \u0438\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f  <\/p>\n<pre><code class=\"cs\">\/\/ ##aspect=&quot;FullNameComment&quot; extra data here<\/code><\/pre>\n<p>  \u0428\u0430\u0431\u043b\u043e\u043d FullNameComment.t4  <\/p>\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt;  \/\/ FullNameComment &lt;#= PropertyNode.Identifier #&gt;<\/code><\/pre>\n<p>  \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d AutoComment.t4, \u043d\u043e \u0437\u0434\u0435\u0441\u044c \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 PropertyNode. \u0422\u0430\u043a\u0436\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 FullNameComment.t4 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u00abextra data here\u00bb \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 ExtraTag (\u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043c\u044b \u0438\u0445 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f)<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438  <\/p>\n<pre><code class=\"cs\">\/\/ FullNameComment FullName<\/code><\/pre>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0430 <\/p>\n<p>  <code>[AopTemplate(&quot;NotifyPropertyChanged&quot;, Action = AopTemplaceAction.Properties)]<\/code><\/p>\n<p>  \u0418 \u0438\u0434\u0435\u043d\u0442\u0438\u0447\u043d\u0430 \u0442\u0430\u043a\u043e\u0432\u043e\u0439 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 Person. \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 NotifyPropertyChanged.t4 \u0443\u0436\u0435 \u0431\u044b\u043b \u0432\u043a\u043b\u044e\u0447\u0435\u043d \u0432\u044b\u0448\u0435 \u043f\u043e \u0442\u0435\u043a\u0441\u0442\u0443.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438  <\/p>\n<pre><code class=\"cs\">public class Customer : Person {     private double _creditScore;     public double CreditScore     {         get         {             return _creditScore;         }          set         {             if (_creditScore != value)             {                 _creditScore = value;                 NotifyPropertyChanged();             }         }     } }<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c<\/h3>\n<p>  \u0425\u043e\u0442\u044f \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u0430\u043a\u0446\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u0430 \u0430\u0441\u043f\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438, \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0430 \u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043c\u043e\u0436\u043d\u043e \u0435\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u0447 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u043a AOP. <\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f dependency injection, \u0442.\u0435. \u043c\u044b \u043c\u0435\u043d\u044f\u0435\u043c \u043a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438. <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0431\u043b\u043e\u043d DependencyInjection.t4<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt; &lt;# \tvar syntaxNode = FieldsInjection(SyntaxNode); \tsyntaxNode = VariablesInjection(syntaxNode); \tsyntaxNode = PropertiesInjection(syntaxNode);\t  \tif(syntaxNode == SyntaxNode) \t\treturn null; #&gt;  &lt;#= syntaxNode.ToFullString() #&gt;  &lt;#+ \tprivate SyntaxNode VariablesInjection(SyntaxNode syntaxNode) \t{ \t\treturn RewriteNodes&lt;LocalDeclarationStatementSyntax &gt;(syntaxNode, OnLocalVariablesInjection);\t \t \t\tSyntaxNode OnLocalVariablesInjection(LocalDeclarationStatementSyntax node) \t\t{ \t\t\tvar errorMsgs = new System.Text.StringBuilder();  \t\t\tSyntaxNode syntaxNode = RewriteNodes&lt;VariableDeclaratorSyntax&gt;(node, (n) =&gt; OnVariableDeclaratorVisit(n, node.Declaration.Type, errorMsgs));  \t\t\tif(errorMsgs.Length &gt; 0) \t\t\t\treturn AddErrorMessageTrivia(syntaxNode, errorMsgs.ToString());  \t\t\treturn syntaxNode; \t\t} \t}  \tprivate SyntaxNode PropertiesInjection(SyntaxNode syntaxNode) \t{ \t\treturn RewriteNodes&lt;PropertyDeclarationSyntax&gt;(syntaxNode, OnPropertyInjection);\t \t \t\tSyntaxNode OnPropertyInjection(PropertyDeclarationSyntax node) \t\t{ \t\t\tif(node.Initializer?.Value?.ToString() != &quot;inject&quot;) \t\t\t\treturn node;  \t\t\tvar errorMsgs = new System.Text.StringBuilder();  \t\t\tSyntaxNode syntaxNode = DoInjection(node, node.Identifier.ToString().Trim(), node.Initializer.Value, node.Type, errorMsgs);  \t\t\tif(errorMsgs.Length &gt; 0) \t\t\t\treturn AddErrorMessageTrivia(syntaxNode, errorMsgs.ToString());  \t\t\treturn syntaxNode; \t\t} \t}  \tprivate SyntaxNode FieldsInjection(SyntaxNode syntaxNode) \t{ \t\treturn RewriteNodes&lt;BaseFieldDeclarationSyntax&gt;(syntaxNode, OnFieldsInjection);\t \t \t\tSyntaxNode OnFieldsInjection(BaseFieldDeclarationSyntax node) \t\t{ \t\t\tvar errorMsgs = new System.Text.StringBuilder();  \t\t\tSyntaxNode syntaxNode = RewriteNodes&lt;VariableDeclaratorSyntax&gt;(node, (n) =&gt; OnVariableDeclaratorVisit(n, node.Declaration.Type, errorMsgs));  \t\t\tif(errorMsgs.Length &gt; 0) \t\t\t\treturn AddErrorMessageTrivia(syntaxNode, errorMsgs.ToString());  \t\t\treturn syntaxNode; \t\t} \t}  \tprivate SyntaxNode OnVariableDeclaratorVisit(VariableDeclaratorSyntax node, TypeSyntax typeSyntax, System.Text.StringBuilder errorMsgs) \t{ \t\tif(node.Initializer?.Value?.ToString() != &quot;inject&quot;) \t\t\treturn node;  \t\treturn DoInjection(node, node.Identifier.ToString().Trim(), node.Initializer.Value, typeSyntax, errorMsgs); \t}  \tprivate SyntaxNode DoInjection(SyntaxNode node, string varName, ExpressionSyntax initializerNode, TypeSyntax typeSyntax, System.Text.StringBuilder errorMsgs) \t{\t\t \t\tstring varType = typeSyntax.ToString().Trim();  \t\tLog($&quot;{varName} {varType} {initializerNode.ToString()}&quot;);  \t\tif(varName.StartsWith(&quot;config&quot;)) \t\t{ \t\t\tstring configName = Regex.Replace(Regex.Replace(varName, &quot;^config&quot;, &quot;&quot;), &quot;([a-z])([A-Z])&quot;, (m) =&gt; m.Groups[1].Value + &quot;_&quot; + m.Groups[2].Value).ToLower(); \t\t\tExpressionSyntax configNode = CreateElementAccess(&quot;_configuration&quot;, CreateStringLiteral(configName));  \t\t\tif(varType == &quot;int&quot;) \t\t\t{ \t\t\t\tconfigNode = CreateMemberAccessInvocation(&quot;Int32&quot;, &quot;Parse&quot;, configNode); \t\t\t}  \t\t\treturn node.ReplaceNode(initializerNode, configNode); \t\t}  \t\tswitch(varType) \t\t{ \t\t\tcase &quot;Microsoft.Extensions.Configuration.IConfigurationRoot&quot;: \t\t\tcase &quot;IConfigurationRoot&quot;: \t\t\t\tEnsureUsing(&quot;Microsoft.Extensions.Configuration&quot;);  \t\t\t\tExpressionSyntax pathCombineArg = CreateMemberAccessInvocation(&quot;System.IO.Path&quot;, &quot;Combine&quot;, CreateMemberAccess(&quot;AppContext&quot;, &quot;BaseDirectory&quot;));  \t\t\t\tExpressionSyntax builderNode = CreateNewType(&quot;ConfigurationBuilder&quot;).WithTrailingTrivia(SyntaxFactory.EndOfLine(&quot;\\r\\n&quot;)); \t\t\t\tbuilderNode  = CreateMemberAccessInvocation(builderNode, &quot;SetBasePath&quot;, pathCombineArg).WithTrailingTrivia(SyntaxFactory.EndOfLine(&quot;\\r\\n&quot;));  \t\t\t\tExpressionSyntax addJsonFileArg = CreateMemberAccessInvocation(&quot;System.IO.Path&quot;, &quot;Combine&quot;, CreateMemberAccess(&quot;AppContext&quot;, &quot;BaseDirectory&quot;));  \t\t\t\tbuilderNode  = CreateMemberAccessInvocationNamedArgs(builderNode, &quot;AddJsonFile&quot;,  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(null, CreateStringLiteral(&quot;appsettings.json&quot;)),  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(&quot;optional&quot;,  SyntaxFactory.LiteralExpression(SyntaxKind.TrueLiteralExpression))).WithTrailingTrivia(SyntaxFactory.EndOfLine(&quot;\\r\\n&quot;));  \t\t\t\tif(GetGlobalSetting(&quot;env&quot;)?.ToLower() == &quot;test&quot;) \t\t\t\t{ \t\t\t\t\tbuilderNode  = CreateMemberAccessInvocationNamedArgs(builderNode, &quot;AddJsonFile&quot;,  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(null, CreateStringLiteral(&quot;appsettings.test.json&quot;)),  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(&quot;optional&quot;,  SyntaxFactory.LiteralExpression(SyntaxKind.FalseLiteralExpression))); \t\t\t\t}  \t\t\t\tbuilderNode  = CreateMemberAccessInvocation(builderNode, &quot;Build&quot;);  \t\t\t\treturn node.ReplaceNode(initializerNode, builderNode); \t\t\t\t \t\t\tcase &quot;IDataService&quot;: \t\t\t{ \t\t\t\tstring className = (GetGlobalSetting(&quot;env&quot;)?.ToLower() == &quot;test&quot; ? &quot;MockDataService&quot; : &quot;DataService&quot;);  \t\t\t\treturn node.ReplaceNode(initializerNode, CreateNewType(className)); \t\t\t} \t\t}  \t\terrorMsgs.AppendLine($&quot;Cannot find injection rule for {varType} {varName}&quot;);  \t\treturn node; \t}  #&gt;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0412 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 (\u0437\u0434\u0435\u0441\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c dynamic \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0442\u044c \u0438\u0445 \u043b\u044e\u0431\u044b\u043c \u0442\u0438\u043f\u0430\u043c), \u0442.\u0435. \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u044b \u043a\u0430\u043a \u0431\u044b \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b\u0438 \u043d\u043e\u0432\u043e\u0435 \u043a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e.  <\/p>\n<pre><code class=\"cs\">private static IConfigurationRoot _configuration = inject; private IDataService _service { get; } = inject; \/\/ ... public Customer[] SecondDemo(Person[] people) {      int configDelayMS = inject; \/\/ we are going to inject dependency to local variables      string configServerName = inject; } \/\/ ... protected static dynamic inject; <\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 GetGlobalSetting(\u00abenv\u00bb) == \u00abtest\u00bb \u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u044d\u0442\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f, \u0431\u0443\u0434\u0435\u0442 \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u043e \u0438\u043b\u0438 new DataService() \u0438\u043b\u0438 new MockDataService(). <\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438  <\/p>\n<pre><code class=\"cs\"> private static IConfigurationRoot _configuration = new ConfigurationBuilder()     .SetBasePath(System.IO.Path.Combine(AppContext.BaseDirectory))     .AddJsonFile(&quot;appsettings.json&quot;, optional: true)     .Build();  private IDataService _service { get; } = new DataService(); \/\/ ... public Customer[] SecondDemo(Person[] people) {        int configDelayMS = Int32.Parse(_configuration[&quot;delay_ms&quot;]);        string configServerName = _configuration[&quot;server_name&quot;]; } \/\/ ... <\/code><\/pre>\n<p>  \u0418\u043b\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u043a\u0430\u043a \u00abpoor man\u00bb static analysis (\u043d\u043e \u0433\u043e\u0440\u0430\u0437\u0434\u043e-\u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0440\u043e\u0434\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c Roslyn), \u043c\u044b \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u0434 \u043d\u0430 \u043d\u0430\u0448\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434<\/p>\n<p>  <code>#error our error message here<\/code><\/p>\n<p>  \u0427\u0442\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043e\u0448\u0438\u0431\u043a\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<p>  <code>#warning our warning message here<\/code><\/p>\n<p>  \u0427\u0442\u043e \u043f\u043e\u0441\u043b\u0443\u0436\u0438\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044e \u0432 IDE \u0438\u043b\u0438 \u043f\u0440\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0431\u043b\u043e\u043d StaticAnalyzer.t4<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt; &lt;# \tvar syntaxNode = AnalyzeLocalVariables(SyntaxNode); \tsyntaxNode = AnalyzeStringFormat(syntaxNode);\t  \tif(syntaxNode == SyntaxNode) \t\treturn null; #&gt;  &lt;#= syntaxNode.ToFullString() #&gt;  &lt;#+  \tprivate SyntaxNode AnalyzeLocalVariables(SyntaxNode syntaxNode) \t{ \t\treturn RewriteNodes&lt;LocalDeclarationStatementSyntax&gt;(syntaxNode, OnAnalyzeLocalVariablesNodeVisit);\t \t \t\tSyntaxNode OnAnalyzeLocalVariablesNodeVisit(LocalDeclarationStatementSyntax node) \t\t{ \t\t\tvar errorMsgs = new System.Text.StringBuilder(); \t\t\t \t\t\tstring d = &quot;&quot;; \t\t\tforeach(VariableDeclaratorSyntax variableNode in node.DescendantNodes().OfType&lt;VariableDeclaratorSyntax&gt;().Where(w =&gt; Regex.IsMatch(w.Identifier.ToString(), &quot;^[A-Z]&quot;))) \t\t\t{ \t\t\t\tLogDebug($&quot;variable: {variableNode.Identifier.ToString()}&quot;);  \t\t\t\terrorMsgs.Append(d + $&quot;variable \\&quot;{variableNode.Identifier.ToString()}\\&quot; doesn't match code standard rules&quot;); \t\t\t\td = &quot;, &quot;; \t\t\t}  \t\t\tif(errorMsgs.Length &gt; 0) \t\t\t\treturn AddErrorMessageTrivia(node, errorMsgs.ToString());  \t\t\treturn node; \t\t} \t}   \tprivate SyntaxNode AnalyzeStringFormat(SyntaxNode syntaxNode) \t{ \t\treturn RewriteLeafStatementNodes(syntaxNode, OnAnalyzeStringFormat);\t \t \t\tSyntaxNode OnAnalyzeStringFormat(StatementSyntax node) \t\t{ \t\t\tbool hasStringFormat = false;  \t\t\tforeach(MemberAccessExpressionSyntax memberAccessNode in node.DescendantNodes().OfType&lt;MemberAccessExpressionSyntax&gt;()) \t\t\t{ \t\t\t\tif(memberAccessNode.Name.ToString().Trim() != &quot;Format&quot;) \t\t\t\t\tcontinue;  \t\t\t\tstring expr = memberAccessNode.Expression.ToString().Trim().ToLower(); \t\t\t\tif(expr != &quot;string&quot; && expr != &quot;system.string&quot;) \t\t\t\t\tcontinue;  \t\t\t\thasStringFormat = true; \t\t\t\tbreak; \t\t\t}  \t\t\tif(hasStringFormat) \t\t\t\treturn AddWarningMessageTrivia(node, &quot;Please replace String.Format with string interpolation format.&quot;);  \t\t\treturn node; \t\t} \t} #&gt;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438  <\/p>\n<pre><code class=\"cs\">#error variable &quot;Customers&quot; doesn't match code standard rules IEnumerable&lt;Customer&gt; Customers; \/\/ ... #warning Please replace String.Format with string interpolation format. Console.Out.WriteLine(i18(String.Format(&quot;SecondDemo: {0}&quot;, &quot;3&quot;))); <\/code><\/pre>\n<p>  \u0418\u043b\u0438 \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442.\u0435. \u043d\u0430\u0445\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0432 \u043a\u043b\u0430\u0441\u0441\u0430\u0445 \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c \u0438\u0445 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0428\u0430\u0431\u043b\u043e\u043d ResourceReplacer.t4<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"php\">&lt;#@ include file=&quot;AopCsharp.ttinclude&quot; #&gt; &lt;#  \tDictionary&lt;string, string&gt; options = ExtraTagAsDictionary(); \t_resources = LoadResources(options[&quot;ResourceFile&quot;]); \t_resourceClass = options[&quot;ResourceClass&quot;];  \tvar syntaxNode = RewriteLeafStatementNodes(SyntaxNode, OnStatementNodeVisit);\t #&gt;  &lt;#= syntaxNode.ToFullString() #&gt;  &lt;#+  \tprivate SyntaxNode OnStatementNodeVisit(StatementSyntax node) \t{ \t\tif(!node.DescendantNodes().OfType&lt;InvocationExpressionSyntax&gt;().Any(w =&gt; (w.Expression is IdentifierNameSyntax) && ((IdentifierNameSyntax)w.Expression).Identifier.ToString() == &quot;i18&quot;  )) \t\t\treturn node;  \t\tvar errorMsgs = new System.Text.StringBuilder();  \t\tSyntaxNode syntaxNode = RewriteNodes&lt;InvocationExpressionSyntax&gt;(node, (n) =&gt; OnInvocationExpressionVisit(n, errorMsgs));  \t\tif(errorMsgs.Length &gt; 0) \t\t\treturn AddErrorMessageTrivia(syntaxNode, errorMsgs.ToString());  \t\treturn syntaxNode; \t}      private SyntaxNode OnInvocationExpressionVisit(InvocationExpressionSyntax node, System.Text.StringBuilder errorMsgs) \t{ \t\tif(!(node.Expression is IdentifierNameSyntax && ((IdentifierNameSyntax)node.Expression).Identifier.ToString() == &quot;i18&quot;  )) \t\t\treturn node;  \t\tArgumentSyntax arg = node.ArgumentList.Arguments.Single(); \/\/ We know that i18 method accepts only one argument. Keep in mind that it is just a demo and in real life you could be more inventive \t\t \t\tvar expr = arg.Expression; \t\tif(!(expr is LiteralExpressionSyntax || expr is InterpolatedStringExpressionSyntax)) \t\t{ \t\t\terrorMsgs.AppendLine($&quot;Argument for i18 method must be either string literal or interpolated string, but instead got {arg.Expression.GetType().ToString()}&quot;);  \t\t\treturn node; \t\t} \t\t \t\tstring s = expr.ToString(); \t\tif(s.StartsWith(&quot;$&quot;)) \t\t{ \t\t\t(string format, List&lt;ExpressionSyntax&gt; expressions) = ConvertInterpolatedStringToFormat((InterpolatedStringExpressionSyntax)expr);  \t\t\tExpressionSyntax stringNode = ReplaceStringWithResource(&quot;\\&quot;&quot; + format + &quot;\\&quot;&quot;, errorMsgs); \t\t\tif(stringNode != null) \t\t\t{ \t\t\t\tvar memberAccess = CreateMemberAccess(&quot;String&quot;, &quot;Format&quot;); \t\t\t \t\t\t\tvar arguments = new List&lt;ArgumentSyntax&gt;(); \t \t\t\t\targuments.Add(SyntaxFactory.Argument(stringNode)); \t\t\t\texpressions.ForEach(item =&gt; arguments.Add(SyntaxFactory.Argument(item)));  \t\t\t\tvar argumentList = SyntaxFactory.SeparatedList(arguments);  \t\t\t\treturn SyntaxFactory.InvocationExpression(memberAccess, SyntaxFactory.ArgumentList(argumentList)); \t\t\t} \t\t} \t\telse \t\t{ \t\t\tSyntaxNode stringNode = ReplaceStringWithResource(s, errorMsgs); \t\t\tif(stringNode != null) \t\t\t\treturn stringNode; \t\t}  \t\treturn node; \t}  \tprivate ExpressionSyntax ReplaceStringWithResource(string s, System.Text.StringBuilder errorMsgs) \t{ \t\tMatch m = System.Text.RegularExpressions.Regex.Match(s, &quot;^\\&quot;(\\\\s*)(.*?)(\\\\s*)\\&quot;$&quot;); \t\tif(!m.Success) \t\t{ \t\t\terrorMsgs.AppendLine($&quot;String doesn't match search criteria&quot;);  \t\t\treturn null; \t\t}  \t\tif(!_resources.TryGetValue(m.Groups[2].Value, out string resourceName)) \t\t{  \t\t\terrorMsgs.AppendLine($&quot;Cannot find resource for a string {s}, please add it to resources&quot;); \t\t\treturn null; \t\t}  \t\tstring csharpName = Regex.Replace(resourceName, &quot;[^A-Za-z0-9]&quot;, &quot;_&quot;);  \t\tExpressionSyntax stringNode = CreateMemberAccess(_resourceClass, csharpName);  \t\tif(!String.IsNullOrEmpty(m.Groups[1].Value) || !String.IsNullOrEmpty(m.Groups[3].Value)) \t\t{ \t\t\tif(!String.IsNullOrEmpty(m.Groups[1].Value)) \t\t\t{ \t\t\t\tstringNode = SyntaxFactory.BinaryExpression(SyntaxKind.AddExpression,  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCreateStringLiteral(m.Groups[1].Value),  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstringNode); \t\t\t}  \t\t\tif(!String.IsNullOrEmpty(m.Groups[3].Value)) \t\t\t{ \t\t\t\tstringNode = SyntaxFactory.BinaryExpression(SyntaxKind.AddExpression,  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\tstringNode,  \t\t\t\t\t\t\t\t\t\t\t\t\t\t\tCreateStringLiteral(m.Groups[3].Value)); \t\t\t}  \t\t\tstringNode = SyntaxFactory.ParenthesizedExpression(stringNode); \t\t}  \t\treturn stringNode; \t}\t  \tprivate string _resourceClass; \tprivate Dictionary&lt;string,string&gt; _resources; #&gt;<\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434  <\/p>\n<pre><code class=\"cs\"> Console.Out.WriteLine(i18(&quot;SecondDemo: i18&quot;)); \/\/ ... Console.Out.WriteLine(i18($&quot;First Name {customer.FirstName} Last Name {customer.LastName}&quot;));  Console.Out.WriteLine(&quot;SecondDemo: 2 &quot; + i18(&quot;First Name &quot;) + customer.FirstName + i18(&quot; Last Name   &quot;) + customer.LastName); \/\/ ...  Console.Out.WriteLine(i18(String.Format(&quot;SecondDemo: {0}&quot;, &quot;3&quot;))); \/\/ ... protected static string i18(string s) =&gt; s; <\/code><\/pre>\n<p>  \u0412 \u0444\u0430\u0439\u043b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 Demo.resx \u0443 \u043d\u0430\u0441 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u043e\u043a\u0438  <\/p>\n<pre><code class=\"xml\">&lt;data name=&quot;First Last Names Formatted&quot; xml:space=&quot;preserve&quot;&gt;   &lt;value&gt;First Name {0} Last Name {1}&lt;\/value&gt; &lt;\/data&gt; &lt;data name=&quot;First Name&quot; xml:space=&quot;preserve&quot;&gt;     &lt;value&gt;First Name&lt;\/value&gt; &lt;\/data&gt; &lt;data name=&quot;Last Name&quot; xml:space=&quot;preserve&quot;&gt;   &lt;value&gt;Last Name&lt;\/value&gt; &lt;\/data&gt;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0430\u0439\u043b\u0430 Demo.Designer.cs<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">public class Demo  { \/\/ ...      public static string First_Last_Names_Formatted     {         get         {             return ResourceManager.GetString(&quot;First Last Names Formatted&quot;, resourceCulture);         }     }      public static string First_Name     {         get         {             return ResourceManager.GetString(&quot;First Name&quot;, resourceCulture);         }     }      public static string Last_Name     {         get         {             return ResourceManager.GetString(&quot;Last Name&quot;, resourceCulture);         }     } }<\/code><\/pre>\n<\/div><\/div>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 (\u043e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0447\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0431\u044b\u043b\u0430 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u0430 \u043d\u0430 String.Format \u0438 \u0431\u044b\u043b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0440\u0435\u0441\u0443\u0440\u0441 \u00abFirst Name {0} Last Name {1}\u00bb). \u0414\u043b\u044f \u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u0438\u043b\u0438 \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0432\u0443\u044e\u0442 \u043d\u0430\u0448\u0435\u043c\u0443 \u0444\u043e\u0440\u043c\u0430\u0442\u0443, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435  <\/p>\n<pre><code class=\"cs\">\/\/#error Cannot find resource for a string &quot;SecondDemo: i18&quot;, please add it to resources Console.Out.WriteLine(i18(&quot;SecondDemo: i18&quot;)); \/\/ ... Console.Out.WriteLine(String.Format(Demo.First_Last_Names_Formatted, customer.FirstName, customer.LastName));  Console.Out.WriteLine(&quot;SecondDemo: 2 &quot; + (Demo.First_Name + &quot; &quot;) + customer.FirstName + (&quot; &quot; + Demo.Last_Name + &quot;   &quot;) + customer.LastName); \/\/ ... \/\/#error Argument for i18 method must be either string literal or interpolated string, but instead got Microsoft.CodeAnalysis.CSharp.Syntax.InvocationExpressionSyntax Console.Out.WriteLine(i18(String.Format(&quot;SecondDemo: {0}&quot;, &quot;3&quot;))); <\/code><\/pre>\n<p>  \u0412\u0434\u043e\u0431\u0430\u0432\u043e\u043a, \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 C#, \u043d\u043e \u0438 \u0441 \u043b\u044e\u0431\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0444\u0430\u0439\u043b\u043e\u0432 (\u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c\u0438). \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0430\u0440\u0441\u0435\u0440 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c AST \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u044f\u0437\u044b\u043a\u0430, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c Roslyn \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0441\u0435\u0440, \u043f\u043e\u0434\u0448\u0430\u043c\u0430\u043d\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u043a\u043e\u0434\u0430 \u0438 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u043a Roslyn \u043e\u0447\u0435\u043d\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0443\u0441\u0438\u043b\u0438\u0439. \u0412 \u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043a C#, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0434\u043b\u044f JavaScript \u0438 TypeScript \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043d\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435 \u0442\u0430\u043a \u043f\u043e\u043b\u043d\u043e \u043a\u0430\u043a \u0434\u043b\u044f C#.<\/p>\n<p>  \u0415\u0449\u0451 \u0440\u0430\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0438 \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c\u0441\u044f \u2014 sky is the limit.<\/p>\n<p>  \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0442\u043e \u0447\u0442\u043e \u0443\u0434\u0435\u043b\u0438\u043b\u0438 \u0441\u0432\u043e\u0451 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043f\u0430\u0440\u0443 \u043b\u0435\u0442 \u043d\u0430\u0437\u0430\u0434, \u043d\u043e \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e \u0432 \u0441\u0438\u043b\u0443 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d, \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0435\u0439\u0447\u0430\u0441.<\/p>\n<p>  \u041d\u0430\u0448 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u043d\u0430 .Net Framework, \u043d\u043e \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u043d\u0430\u0434 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 \u0441 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043f\u043e\u0434 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439 MIT \u0434\u043b\u044f .Net Core. \u041d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d \u0438 \u0433\u043e\u0442\u043e\u0432 \u043d\u0430 90%, \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043f\u0440\u0438\u0447\u0451\u0441\u043a\u0430 \u043a\u043e\u0434\u0430, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u043d\u043e \u0431\u0435\u0437 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e \u0432\u043e\u0439\u0442\u0438 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u0430\u043c\u0430 \u0438\u0434\u0435\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043c\u043f\u0440\u043e\u043c\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0438 DX \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u043c.<\/p>\n<p>  \u0427\u0435\u043b\u043e\u0432\u0435\u043a \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043d\u0430\u0434 \u0435\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c, \u043d\u0435 \u0441\u043c\u043e\u0433 \u0435\u0433\u043e \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043d\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0440\u0435\u0430\u043a\u0446\u0438\u044e \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u043e \u0447\u0442\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043e\u0441\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u043e \u0438 \u0432\u043f\u043e\u043b\u043d\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0443\u044e \u043d\u0438\u0448\u0443 \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0438\u043b\u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. <\/p>\n<p>  \u0421\u0430\u043c\u0430 \u0438\u0434\u0435\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u043b \u0432 \u043e\u0431\u0449\u0435\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043c\u0435\u0441\u044f\u0446\u0430 \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442 \u0441 \u0445\u043e\u0440\u043e\u0448\u0435\u0439 \u043a\u0432\u0430\u043b\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u0438 \u043e\u043f\u044b\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 Roslyn, \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0437\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u043d\u0435\u0439. \u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0432\u0441\u0435\u0433\u043e \u043e\u043a\u043e\u043b\u043e 150KB, \u0432\u043a\u043b\u044e\u0447\u0430\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b.<\/p>\n<p>  \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u043a\u0440\u0438\u0442\u0438\u043a\u0435 (\u043d\u0435\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u043c\u0435\u043d\u044f \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0433\u043e\u0440\u0447\u0438\u0442, \u0442\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u0441\u0442\u0435\u0441\u043d\u044f\u0439\u0442\u0435\u0441\u044c).<\/p>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0435\u043d \u0424\u0438\u043b\u0443 \u0420\u0430\u043d\u0436\u0438\u043d\u0443 (<a href=\"https:\/\/habr.com\/ru\/users\/fillpackart\/\" class=\"user_link\">fillpackart<\/a>) \u0437\u0430 \u043c\u043e\u0442\u0438\u0432\u0430\u0446\u0438\u044e \u0432 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u0442\u044c\u0438. \u041a\u0430\u043d\u0430\u043b \u00ab\u041c\u044b \u043e\u0431\u0440\u0435\u0447\u0435\u043d\u044b\u00bb \u0440\u0443\u043b\u0438\u0442!<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/520834\/\"> https:\/\/habr.com\/ru\/post\/520834\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\" data-io-article-url=\"https:\/\/habr.com\/ru\/post\/520834\/\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pw\/2f\/w6\/pw2fw6fhcagoqxtrjpf5-lhjveg.png\"\/><\/p>\n<p>  \u0410\u0441\u043f\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u043a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u0434\u043b\u044f \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u0438\u044f \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u044b, \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0447\u0438\u0441\u0442\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0438 \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0442\u0438\u043f\u0430 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u044b.<\/p>\n<p>  \u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u0435 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432 \u0438\u0434\u0451\u0442 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0430, \u0442.\u0435. \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u043d\u0435\u043a\u0438\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u00ab\u0432\u043f\u043b\u0435\u0442\u0430\u0435\u0442\u00bb \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0431\u0430\u0439\u0442 \u043a\u043e\u0434 \u0441 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u0438.<\/p>\n<p>  \u041d\u0430\u0448 \u043f\u043e\u0434\u0445\u043e\u0434 (\u0442\u0430\u043a\u0436\u0435 \u043a\u0430\u043a \u0438 \u043f\u043e\u0434\u0445\u043e\u0434 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432), \u044d\u0442\u043e \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0430\u0441\u043f\u0435\u043a\u0442\u043e\u0432. \u0421 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043d\u0430 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u044e Roslyn, \u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f \u044d\u0442\u043e\u0433\u043e \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0434\u0430\u0451\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u0430\u0439\u0442 \u043a\u043e\u0434\u0430.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u0443\u0437\u043d\u0430\u0442\u044c \u0434\u0435\u0442\u0430\u043b\u0438, \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434 \u043a\u0430\u0442.   <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-310553","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/310553","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=310553"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/310553\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=310553"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=310553"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=310553"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}