
рдпрд╣ рд▓реЗрдЦ PVS-Studio рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕рд╛рде рдСрд░реНрдЪрд░реНрдб рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рджреВрд╕рд░реЗ рдЪреЗрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдСрд░реНрдЪрд░реНрдб рдПрдХ рдУрдкрди-рд╕реЛрд░реНрд╕ рдХрдВрдЯреЗрдВрдЯ рдореИрдиреЗрдЬрд░ рд╕рд┐рд╕реНрдЯрдо рд╣реИ, рдЬреЛ рдиреЙрди-рдкреНрд░реЙрдлрд┐рдЯ рдСрдЙрдЯрд░рдХрд╡ рдлрд╛рдЙрдВрдбреЗрд╢рди рдХреЗ рддрд╣рдд ASP.NET рдУрдкрди рд╕реЛрд░реНрд╕ рдЧреИрд▓рд░реА рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдЬ рдХреА рдЬрд╛рдБрдЪ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реА рдЬрд╛рдБрдЪ рдХреЗ рдмрд╛рдж рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреЛрдиреЛрдВ рдПрдХ рд▓рдВрдмрд╛ рд░рд╛рд╕реНрддрд╛ рддрдп рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕ рдмрд╛рд░ рд╣рдо рдирдП рдиреИрджрд╛рдирд┐рдХ тАЛтАЛрд╕рдВрджреЗрд╢реЛрдВ рдФрд░ рдХреБрдЫ рдЕрдЪреНрдЫреЗ рдмрдЧреЛрдВ рдХреЛ рджреЗрдЦреЗрдВрдЧреЗред
рдСрд░реНрдЪрд░реНрдб рд╕реАрдПрдордПрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВрд╣рдордиреЗ рддреАрди рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдСрд░реНрдЪрд░реНрдб рдХреА
рдЬрд╛рдБрдЪ рдХреА ред PVS-Studio рдХрд╛ C # рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рддрдм рд╕реЗ рдмрд╣реБрдд рд╡рд┐рдХрд╕рд┐рдд рд╣реБрдЖ рд╣реИ: рд╣рдордиреЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ, рдЗрдВрдЯрд░рдкреНрд░реЛрдбреНрдпреВрд░рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдирдП рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХреНрд╕ рдЬреЛрдбрд╝реЗ рд╣реИрдВ, рдФрд░ рдХрдИ рдЧрд▓рдд рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛рдПрдВ рддрдп рдХреА рд╣реИрдВред рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ, рджреВрд╕рд░реЗ рдЪреЗрдХ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдСрд░реНрдЪрд░реНрдб рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдмрддрд╛рдП рдЧрдП рд╕рднреА рдХреАрдбрд╝реЗ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рдерд╛, рдЬрд┐рд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдордиреЗ рдЕрдкрдирд╛ рд▓рдХреНрд╖реНрдп рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд▓рд┐рдпрд╛ рдерд╛, рдпрд╛рдиреА рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдирд╛ рдерд╛ред
рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рд╡реЗ рдЗрд╕ рд▓реЗрдЦ рдкрд░ рднреА рдзреНрдпрд╛рди рджреЗрдВрдЧреЗ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╕реБрдзрд╛рд░ рдХрд░реЗрдВрдЧреЗ рдпрд╛, рдлрд┐рд░ рднреА, рдирд┐рдпрдорд┐рдд рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдЕрдкрдирд╛рдПрдВрдЧреЗред рдПрдХ рдЕрдиреБрд╕реНрдорд╛рд░рдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдПрдХ рдореБрдХреНрдд рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд╕рд╛рде
рдУрдкрди-рд╕реЛрд░реНрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреЗ
рд╣реИрдВ ред рд╡реИрд╕реЗ, рдРрд╕реЗ рдЕрдиреНрдп
рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ рдЬреЛ рдорд╛рд▓рд┐рдХрд╛рдирд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рднреА рдЖрдирдВрдж рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред
рдСрд░реНрдЪрд░реНрдб рдХрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдб
рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз
рд╣реИ ред рд╕рдВрдкреВрд░реНрдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рд╡рд░рдг
рдпрд╣рд╛рдБ рдкрд╛рдпрд╛ рдЧрдпрд╛
рд╣реИ ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрднреА рддрдХ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЙрдкреА рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ 7.05 рдмреАрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдХреБрдЫ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реВрдВрдЧрд╛ред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд╕рдореАрдХреНрд╖рд╛ рдЖрдкрдХреЛ рдмрддрд╛рдПрдЧреА рдХрд┐ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХ рдЙрдкрдпреЛрдЧреА рдЙрдкрдХрд░рдг рд╣реИред рдмрд╕ рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ
рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ ред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдордпрд╣рд╛рдВ рдСрд░реНрдЪрд░реНрдб рдХреЗ рдкрд╣рд▓реЗ рдЪреЗрдХ рд╕реЗ рдХреБрдЫ рдЖрдВрдХрдбрд╝реЗ рджрд┐рдП рдЧрдП рд╣реИрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЛ рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП рджреЛ рд▓реЗрдЦреЛрдВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рди рдХрд░рдирд╛ рдкрдбрд╝реЗред
рдкрд┐рдЫрд▓реЗ рдЪреЗрдХ рдХреЗ рджреМрд░рд╛рди, "рд╣рдордиреЗ .cs рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рд╕рднреА рд╕реНрд░реЛрдд рдХреЛрдб рдлрд╝рд╛рдЗрд▓реЛрдВ (3739 рдЖрдЗрдЯрдо) рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдерд╛ред рдХреБрд▓ рдпреЛрдЧ рдореЗрдВ рдХреЛрдб рдХреА 214,564 рд▓рд╛рдЗрдиреЗрдВ рдереАрдВред рдЬрд╛рдБрдЪ рдХрд╛ рдкрд░рд┐рдгрд╛рдо 137 рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ рдереАрдВред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ 39 (рдЙрдЪреНрдЪ) рд╕реНрддрд░ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдереАред 60 рд╕реЗрдХрдВрдб (рдордзреНрдпрдо) рд╕реНрддрд░ рдХреА рдЪреЗрддрд╛рд╡рдиреА рднреА рдереАред тАЭ
рдСрд░реНрдЪрд░реНрдб рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг 2,767 .cs рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рдмрдирд╛ рд╣реИ, рдпрд╛рдиреА рдпрд╣ рд▓рдЧрднрдЧ рдПрдХ рд╣рдЬрд╛рд░ рдлрд╛рдЗрд▓реЗрдВ рдЫреЛрдЯреА рд╣реИред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдбрд╛рдЙрдирд╕рд╛рдЗрдЬрд╝рд┐рдВрдЧ рдФрд░ рдирд╛рдо рдмрджрд▓рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдХреЛрд░ (
966 рдХрдорд┐рдЯ ) рдХреЛ рдЕрд▓рдЧ рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐ 108,287 рдПрд▓рдУрд╕реА рд▓рдВрдмрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ 153 рдЪреЗрддрд╛рд╡рдиреА рдЬрд╛рд░реА рдХреА: 33 рдкреНрд░рдердо-рд╕реНрддрд░ рдФрд░ 70 рджреВрд╕рд░реЗ-рд╕реНрддрд░ рд╡рд╛рд▓реЗред рд╣рдо рдЖрдо рддреМрд░ рдкрд░ рддреАрд╕рд░реЗ рд╕реНрддрд░ рдХреА рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рдкрд░рдВрдкрд░рд╛ рд╕реЗ рдЪрд┐рдкрдХреЗ рд░рд╣рдиреЗ рд╡рд╛рд▓рд╛ рд╣реВрдВред
PVS- рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3110 'TryValidateModel' рдкрджреНрдзрддрд┐ рдХреЗ рдЕрдВрджрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ред рдЙрдкрд╕рд░реНрдЧрдХреГрддрдореЛрдбреБрд▓реЗрдкрджрддреНрд░ edрекule ule
public bool TryValidateModel(object model, string prefix) { return TryValidateModel(model, Prefix(prefix)); }
рдПрдХ рдЕрдирдВрдд рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдмрдЧ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛ред рдЗрд╕ рдмрд╛рд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╕рдЯреАрдХ рдЗрд░рд╛рджреЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐
TryValidateModel рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдерд╛:
public bool TryValidateModel(object model) { return _updateModel.TryValidateModel(model); }
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐, рдЕрддрд┐рднрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдорд╛рдорд▓реЗ рдХреА рддрд░рд╣, рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдЗрд░рд╛рджрд╛
_updateModel рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХрд╛ рд╣реИ
ред рд╕рдВрдХрд▓рдХ рдиреЗ рдЧрд▓рддреА рдХреЛ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛;
_updateModel IUpdateModel рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рдФрд░ рд╡рд░реНрддрдорд╛рди рд╡рд░реНрдЧ рднреА рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЪреВрдВрдХрд┐
StackOverflowException рдХреЗ рд╡рд┐рд░реБрджреНрдз рдХрд┐рд╕реА рднреА рдЬрд╛рдБрдЪ рдореЗрдВ рд╡рд┐рдзрд┐ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдЗрд╕реЗ рдХрднреА рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛, рд╣рд╛рд▓рд╛рдБрдХрд┐ рдореИрдВ рдЙрд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд░рддрд╛ред рдпрджрд┐ рдореЗрд░реА рдзрд╛рд░рдгрд╛ рд╕рд╣реА рд╣реИ, рддреЛ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:
public bool TryValidateModel(object model, string prefix) { return _updateModel.TryValidateModel(model, Prefix(prefix)); }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3008 'рдХрдВрдЯреЗрдВрдЯ' рд╡реЗрд░рд┐рдПрдмрд▓ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рджреЛ рдмрд╛рд░ рдорд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рд╣реИред рдЪреЗрдХ рд▓рд╛рдЗрди: 197, 190. рдбрд╛рдпрдиреЗрдорд┐рдХрдЪреИрдЯреЗрдЧ рд╣реЗрд▓реНрдкрд░ред 197
public override async Task ProcessAsync(....) { .... IHtmlContent content; .... try { content = await output.GetChildContentAsync(); } finally { _cacheScopeManager.ExitScope(); } content = await ProcessContentAsync(output, cacheContext); .... }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ рд╕реНрдерд╛рдиреАрдп рдЪрд░
рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рджреЛ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛
ред GetChildContentAsync рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкрджреНрдзрддрд┐ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рд╣реА рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдПрдиреЛрдЯреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реЗрд╢рд╛рдиреА
рдЙрдард╛рдПрдВ ред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдбрд░ рд╣реИ, рди рддреЛ рд╣рдо, рди рд╣реА рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╡рд┐рдзрд┐ рдХреА рд╡рд╛рдкрд╕реА рд╡рд╕реНрддреБ рдФрд░ рджреБрд╖реНрдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдкрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐
рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд░рд┐рдЯрд░реНрди рд╡реИрд▓реНрдпреВ рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░рдирд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░ рдпрд╣ рдХреЛрдб рдореЗрдВ рдЖрдЧреЗ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЧрд▓рддреА рдХреЗ рдмрдЬрд╛рдп рдХреЗрд╡рд▓ рдПрдХ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдСрдкрд░реЗрд╢рди рд╣реИред рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реВрдВред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3080 рд╕рдВрднрд╛рд╡рд┐рдд
рдЕрд╢рдХреНрддрддрд╛ ред 'рдЖрдЗрдЯрдордЯреИрдЧ' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред CoreShapes.cs 92
public async Task<IHtmlContent> List(....string ItemTag....) { .... string itemTagName = null; if (ItemTag != "-") { itemTagName = string.IsNullOrEmpty(ItemTag) ? "li" : ItemTag; } var index = 0; foreach (var item in items) { var itemTag = String.IsNullOrEmpty(itemTagName) ? null : ....; .... itemTag.InnerHtml.AppendHtml(itemContent); listTag.InnerHtml.AppendHtml(itemTag); ++index; } return listTag; }
рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдиреЗ
рдЖрдЗрдЯрдордЯреИрдЧ рдХреЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд
рдбреАрдлрд╝реЗрд░реЗрдиреНрд╕ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ред рдпрд╣ рд╕реНрдирд┐рдкреЗрдЯ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рдПрдХ рдорд╛рдирд╡ рдбреЗрд╡рд▓рдкрд░ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╕реЗ рдЕрд▓рдЧ рд╣реИред рд╡рд┐рдзрд┐ рдореЗрдВ
рдЖрдЗрдЯрдордЯреИрдЧ рдирд╛рдо рдХрд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░
рдЖрдЗрдЯрдордЯреИрдЧ рдирд╛рдордХ рдПрдХ рд╕реНрдерд╛рдиреАрдп рдЪрд░ рд╣реИред рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдВрдХрд▓рдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝рд╛ рдЕрдВрддрд░ рдмрдирд╛рддрд╛ рд╣реИ! рдпреЗ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╣реИрдВ, рднрд▓реЗ рд╣реА рд╕рдВрдмрдВрдзрд┐рдд, рдЪрд░ред рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╡реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рд╡рд╣ рдПрдХ рддреАрд╕рд░реЗ рдЪрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реИ,
рдЖрдЗрдЯрдордЯреИрдЧрдирд╛рдоред рдпрд╣рд╛рдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЕрдкрд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЪрд░рдгреЛрдВ рдХрд╛ рдХреНрд░рдо рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: рдпрджрд┐
рдЖрдЗрдЯрдордЯреИрдЧ рддрд░реНрдХ "-" рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ, рддреЛ
рдЖрдЗрдЯрдо рдХреЛ рдХреЛрдИ рднреА
рдЖрдЗрдЯрдо рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдПрдХ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рдореЗрдВ рднреА рдмрджрд▓ рдЬрд╛рдПрдЧрд╛ред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЬрд╛рдВрдЪ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
public async Task<IHtmlContent> List(....string ItemTag....) { .... string itemTagName = null; if (ItemTag != "-") { itemTagName = string.IsNullOrEmpty(ItemTag) ? "li" : ItemTag; } var index = 0; foreach (var item in items) { var itemTag = ....; if(String.IsNullOrEmpty(itemTag)) throw .... .... itemTag.InnerHtml.AppendHtml(itemContent); listTag.InnerHtml.AppendHtml(itemTag); ++index; } return listTag; }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3095 'рд░рд┐рдореЛрдЯ рдХреНрд▓рд┐рдПрдВрдЯ' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ рдЗрд╕реЗ рд╢реВрдиреНрдп рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рдБрдЪ рд▓рд╛рдЗрдиреЗрдВ: 49, 51. ImportRemoteInstanceController.cs 49
public async Task<IActionResult> Import(ImportViewModel model) { .... var remoteClient = remoteClientList.RemoteClients.FirstOrDefault(....); var apiKey = Encoding.UTF8.GetString(....(remoteClient.ProtectedApiKey)); if (remoteClient == null || ....) { .... } .... }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ
рд░рд┐рдореЛрдЯ рдХреНрд▓рд┐рдПрдВрдЯ рдХреЗ рдПрдХ
рд╡рд┐рдЪрд▓рди рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдмрд╛рдж рдореЗрдВ рдПрдХ-рджреЛ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдЕрд╢рдХреНрдд рдЬрд╛рдВрдЪ рдХреАред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд
NullReferenceException рд╣реИ рдХреНрдпреЛрдВрдХрд┐
FirstOrDefault рд╡рд┐рдзрд┐ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди (рдЬреЛ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП
рд░рд┐рдХреНрдд рд╣реИ ) рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдХреЛ рдХреЗрд╡рд▓ рдЪреЗрдХ рдЕрдк рдХреЛ рдЖрдЧреЗ рдмрдврд╝рд╛рдХрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдбрд╛рдпрд░реИрдХреНрд╢рди рдСрдкрд░реЗрд╢рди рд╕реЗ рдкрд╣рд▓реЗ:
public async Task<IActionResult> Import(ImportViewModel model) { .... var remoteClient = remoteClientList.RemoteClients.FirstOrDefault(....); if (remoteClient != null) var apiKey = UTF8.GetString(....remoteClient.ProtectedApiKey); else if (....) { .... } .... }
рдпрд╛ рд╢рд╛рдпрдж рдпрд╣
FirstOrDefault рдХреЛ
First рдХреЗ рд╕рд╛рде рдмрджрд▓рдХрд░ рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЪреЗрдХ рдХреЛ рд╣рдЯрд╛рдХрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ 7.05 рдмреАрдЯрд╛ рджреНрд╡рд╛рд░рд╛ рдЪреЗрддрд╛рд╡рдиреА:рдЕрдм рддрдХ, рд╣рдордиреЗ
LINQ рдХреЗ
orDefault рдХреЗ рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЛ рдПрдиреЛрдЯреЗрдЯ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдЬрд┐рд╕ рдирдП рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдкрд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛: рдпрд╣ рдЙрди рдорд╛рдорд▓реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдБ рдЗрди рд╡рд┐рдзрд┐рдпреЛрдВ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рдиреЛрдВ рдХреЛ рдмрд┐рдирд╛ рдкреВрд░реНрд╡ рдЬрд╛рдБрдЪ рдХреЗ рдбрд┐рд░реЗрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ
orDefault рдореЗрдердб рдореЗрдВ рдПрдХ рдкреНрд░рддрд┐рд░реВрдк рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ рдпрджрд┐ рдХреЛрдИ рдорд┐рд▓рд╛рди рддрддреНрд╡ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред рдпрд╣ рдЕрдкрд╡рд╛рдж рдЕрдореВрд░реНрдд
NullReferenceException рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╕рд╣рд╛рдпрдХ рд╣реЛрдЧрд╛ред
рдореИрдВ рдЗрд╕ рдирд┐рджрд╛рди рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдСрд░реНрдЪрд░реНрдб рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред 27 рд╕рдВрднрд╛рд╡рд┐рдд рдЦрддрд░рдирд╛рдХ рд╕реНрдкреЙрдЯ рд╣реИрдВред рдпрд╣рд╛рдБ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВ:
ContentTypesAdminNodeNavigationBuilder.cs 71:
var treeBuilder = treeNodeBuilders.Where(....).FirstOrDefault(); await treeBuilder.BuildNavigationAsync(childNode, builder, treeNodeBuilders);
ListPartDisplayDriver.cs 217:
var contentTypePartDefinition = ....Parts.FirstOrDefault(....); return contentTypePartDefinition.Settings....;
ContentTypesAdminNodeNavigationBuilder.cs 113:
var typeEntry = node.ContentTypes.Where(....).FirstOrDefault(); return AddPrefixToClasses(typeEntry.IconClass);
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3080 рд╕рдВрднрд╡ рд╡рд╛рдкрд╕реА рд╡рд┐рдзрд┐ рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рдмрд┐рдирд╛ред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: CreateScope ()ред SetupService.cs 136
public async Task<string> SetupInternalAsync(SetupContext context) { .... using (var shellContext = await ....) { await shellContext.CreateScope().UsingAsync(....); } .... }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдиреЗ
CreateScope рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХрд╛ рдПрдХ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ред
CreateScope рдПрдХ рдЫреЛрдЯреА рд╡рд┐рдзрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
public ShellScope CreateScope() { if (_placeHolder) { return null; } var scope = new ShellScope(this);
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рджреЛ рдорд╛рдорд▓реЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣
рдЕрд╢рдХреНрдд рд▓реМрдЯ рд╕рдХрддрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рдкреНрд░рд╡рд╛рд╣ рдХрд┐рд╕ рд╢рд╛рдЦрд╛ рдХрд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рдЦреЗрд▓рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб рдХреЛ рд╕рдВрджрд┐рдЧреНрдз рдмрддрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдореБрдЭреЗ рдЗрд╕ рддрд░рд╣ рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдерд╛, рддреЛ рдореИрдВ рддреБрд░рдВрдд рдПрдХ рд╢реВрдиреНрдп рдЬрд╛рдВрдЪ рд▓рд┐рдЦреВрдВрдЧрд╛ред
рд╢рд╛рдпрдж рдореЗрд░реА рд░рд╛рдп рдкрдХреНрд╖рдкрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╣рд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡рд┐рдзрд┐ рдХреЛ
NullReferenceException рд╕реЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╕рд╛рдорд╛рди рдХреЛ рдбрд┐рдмрдЧ рдХрд░рдирд╛ рдРрд╕реЗ рд╣реА рд╕реБрдЦрдж рд╣реИред
рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рдореЗрдВ,
CreateScope рдкрджреНрдзрддрд┐ рдХреЛ рдЪрд╛рд░ рдмрд╛рд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЙрди рдХреЙрд▓реЛрдВ рдореЗрдВ рд╕реЗ рджреЛ рдЪреЗрдХ рдХреЗ рд╕рд╛рде рд╣реИрдВ рдФрд░ рдЕрдиреНрдп рджреЛ рдирд╣реАрдВ рд╣реИрдВред рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рджреЛ рдХреЙрд▓ (рдмрд┐рдирд╛ рдЬрд╛рдВрдЪ рдХреЗ) рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдХреНрд▓реЛрди (рдПрдХ рд╣реА рд╡рд░реНрдЧ, рдПрдХ рд╣реА рд╡рд┐рдзрд┐, рдПрдХ рд╣реА рддрд░реАрдХрд╛ dereferencing рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрдиреЗ рд▓рдЧрддреЗ рд╣реИрдВ)ред рдЙрди рджреЛ рдХреЙрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдКрдкрд░ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рджреВрд╕рд░рд╛ рдПрдХ рд╣реА рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ:
V3080 рд╡рд┐рдзрд┐ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХреА рд╕рдВрднрд╛рд╡рд┐рдд
рдЕрд╢рдХреНрддрддрд╛ ред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: CreateScope ()ред SetupService.cs 192
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3127 рджреЛ рд╕рдорд╛рди рдХреЛрдб рдЯреБрдХрдбрд╝реЗ рдкрд╛рдП рдЧрдПред рд╢рд╛рдпрдж, рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реИ рдФрд░ 'ConsumerSecret' TwitterClientMessageHandler.cs 52 рдХреЗ рдмрдЬрд╛рдп 'AccessTokenSecret' рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
public async Task ConfigureOAuthAsync(HttpRequestMessage request) { .... if (!string.IsNullOrWhiteSpace(settings.ConsumerSecret)) settings.ConsumerSecret = protrector.Unprotect(settings.ConsumerSecret); if (!string.IsNullOrWhiteSpace(settings.ConsumerSecret)) settings.AccessTokenSecret = protrector.Unprotect(settings.AccessTokenSecret); .... }
рдпрд╣ рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдЧрд▓рддреА рд╣реИред
ConsumerSecret рдХреЛ рджреЛ рдмрд╛рд░ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрдмрдХрд┐
AccessTokenSecret рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдЪреЗрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
public async Task ConfigureOAuthAsync(HttpRequestMessage request) { .... if (!string.IsNullOrWhiteSpace(settings.ConsumerSecret)) settings.ConsumerSecret = protrector.Unprotect(settings.ConsumerSecret); if (!string.IsNullOrWhiteSpace(settings.AccessTokenSecret)) settings.AccessTokenSecret = protrector.Unprotect(settings.AccessTokenSecret); .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3139 рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдХреЗрд╕-рд╢рд╛рдЦрд╛рдПрдБ рдПрдХ рд╣реА рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЗ рд╣реИрдВред SerialDocumentExecuter.cs 23
рдПрдХ рдФрд░ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдмрдЧред рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдкреВрд░реНрдг рд╡рд░реНрдЧ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди (рдпрд╣ рдЫреЛрдЯрд╛ рд╣реИ)ред
public class SerialDocumentExecuter : DocumentExecuter { private static IExecutionStrategy ParallelExecutionStrategy = new ParallelExecutionStrategy(); private static IExecutionStrategy SerialExecutionStrategy = new SerialExecutionStrategy(); private static IExecutionStrategy SubscriptionExecutionStrategy = new SubscriptionExecutionStrategy(); protected override IExecutionStrategy SelectExecutionStrategy(....) { switch (context.Operation.OperationType) { case OperationType.Query: return SerialExecutionStrategy; case OperationType.Mutation: return SerialExecutionStrategy; case OperationType.Subscription: return SubscriptionExecutionStrategy; default: throw ....; } } }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреЛ рд╕рдорд╛рди
рдХреЗрд╕ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддреЗ рдереЗред рджрд░рдЕрд╕рд▓, рдХрдХреНрд╖рд╛ рдореЗрдВ рддреАрди рдЗрдХрд╛рдЗрдпрд╛рдВ рд╣реИрдВ, рдЬрдмрдХрд┐ рд╕реНрд╡рд┐рдЪ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рджреЛ рд╣реИрдВред рдпрджрд┐ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИ рдФрд░ рддреАрд╕рд░реА рдЗрдХрд╛рдИ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рддреЛ рддреАрд╕рд░реА рд╢рд╛рдЦрд╛ рдХреЛ рд╣рдЯрд╛рдХрд░ рдХреЛрдб рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
switch (context.Operation.OperationType) { case OperationType.Query: case OperationType.Mutation: return SerialExecutionStrategy; case OperationType.Subscription: return SubscriptionExecutionStrategy; default: throw ....; }
рдпрджрд┐ рдпрд╣ рдПрдХ рдХреЙрдкреА-рдкреЗрд╕реНрдЯ рдмрдЧ рд╣реИ, рддреЛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рд┐рдЯрд░реНрди рдлрд╝реАрд▓реНрдбреНрд╕ рдореЗрдВ рд╕реЗ рдкрд╣рд▓рд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
switch (context.Operation.OperationType) { case OperationType.Query: return ParallelExecutionStrategy; case OperationType.Mutation: return SerialExecutionStrategy; case OperationType.Subscription: return SubscriptionExecutionStrategy; default: throw ....; }
рдпрд╛ рдпрд╣ рджреВрд╕рд░реА рдХреЗрд╕ рдмреНрд░рд╛рдВрдЪ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдореБрдЭреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рд▓рд┐рдП рдСрдкрд░реЗрд╢рди рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдмрдВрдз рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
switch (context.Operation.OperationType) { case OperationType.Query: return SerialExecutionStrategy; case OperationType.Mutation: return ParallelExecutionStrategy; case OperationType.Subscription: return SubscriptionExecutionStrategy; default: throw ....; }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3080 рд╕рдВрднрд╛рд╡рд┐рдд
рдЕрд╢рдХреНрддрддрд╛ ред 'рдЕрдиреБрд░реЛрдз' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдЧреНрд░рд╛рдлрдХреНрд▓рд╛рдЗрдирдореЗрдбрд╡реЗрдпрд░.рдХреЗрдПрд╕ 148
private async Task ExecuteAsync(HttpContext context....) { .... GraphQLRequest request = null; .... if (HttpMethods.IsPost(context.Request.Method)) { .... } else if (HttpMethods.IsGet(context.Request.Method)) { .... request = new GraphQLRequest(); .... } var queryToExecute = request.Query; .... }
рдЕрдиреБрд░реЛрдз рдЪрд░ рдкрд╣рд▓реЗ рдмреНрд▓реЙрдХ рдореЗрдВ рдХрдИ рдмрд╛рд░
рд╢реВрдиреНрдп рд╕реЗ рднрд┐рдиреНрди рдорд╛рди рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рд░ рдиреЗрд╕реНрдЯреЗрдб рд╢рд░реНрддреЛрдВ рдХреЗ рд╕рд╛рдеред рдЙрди рд╕рднреА рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рд▓рдВрдмрд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдмрд╕ рдкрд╣рд▓реЗ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЬрд╛рдПрдВрдЧреЗ, рдЬреЛ http рд╡рд┐рдзрд┐
IsGet рдпрд╛
IsPost рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред
Microsoft.AspNetCore.Http.HttpMethods рд╡рд░реНрдЧ рдореЗрдВ рдХреНрд╡реЗрд░реА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдиреМ рд╕реНрдерд┐рд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
ExecuteAsync рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ
рд╣рдЯрд╛рдПрдБ рдпрд╛
рд╕реЗрдЯ рдХреНрд╡реЗрд░реА
NullReferenceException рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЗ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реАрдХреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рддрдм рднреА рдЕрдкрд╡рд╛рдж-рдлреЗрдВрдХрдиреЗ рд╡рд╛рд▓реЗ рдЪреЗрдХ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реЛрдЧреАред рдЖрдЦрд┐рд░рдХрд╛рд░, рд╕рд┐рд╕реНрдЯрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рдмрджрд▓ рд╕рдХрддреА рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреА рдЬрд╛рдБрдЪ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
private async Task ExecuteAsync(HttpContext context....) { .... if (request == null) throw ....; var queryToExecute = request.Query; .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3080 рд╕рдВрднрд╡ рд╡рд╛рдкрд╕реА рд╡рд┐рдзрд┐ рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рдмрд┐рдирд╛ред рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ: Get <ContentPart> (...)ред ContentPartHandlerCoordinator.cs 190
V3080 рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдорд╛рд╣реМрд▓ рдХреЗ рднреАрддрд░ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рд╡рд┐рдзрд┐ рдиреЗрд╡рд┐рдЧреЗрд╢рди, рдЯрд╛рдЗрдк рд╣рд╛рдЗрд▓рд╛рдЗрдЯрд┐рдВрдЧ рдФрд░ рдЖрдИрдбреАрдИ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╡рд╛рддрд╛рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдореИрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдкрд╛рда рдХреЛ рдпрдерд╛рд╕рдВрднрд╡ рдХрдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкрдардиреАрдп рд░рдЦрд╛ рдЬрд╛ рд╕рдХреЗред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдЗрд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдпрд╛ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреМрд╢рд▓ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд╕рдордЭрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдХрд┐рд╕реА рднреА рдУрдкрди-рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдпрд╛ рд╕рд┐рд░реНрдл рдЕрдкрдиреЗ рдХреЛрдб рдкрд░ рдЗрд╕ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
public override async Task LoadingAsync(LoadContentContext context) { .... context.ContentItem.Get<ContentPart>(typePartDefinition.Name) .Weld(fieldName, fieldActivator.CreateInstance()); .... }
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЗрд╕ рд▓рд╛рдЗрди рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдПрдХ рдирдЬрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ
Get рд╡рд┐рдзрд┐ рдкрд░:
public static TElement Get<TElement>(this ContentElement contentElement....) where TElement : ContentElement { return (TElement)contentElement.Get(typeof(TElement), name); }
рдпрд╣ рдЗрд╕рдХреЗ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕реЗ рднреА рдЬрд╛рдВрдЪреЗрдВ:
public static ContentElement Get(this ContentElement contentElement....) { .... var elementData = contentElement.Data[name] as JObject; if (elementData == null) { return null; } .... }
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдореЗрдВ
рдбреЗрдЯрд╛ рдЗрдВрдбреЗрдХреНрд╕рд░
рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдЬреЙрдпрдЬреЗрдХреНрдЯ рд╕реЗ рдЕрд╕рдВрдЧрдд рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЗрдХрд╛рдИ
рдорд┐рд▓рддреА рд╣реИ, рддреЛ
рдЧреЗрдЯ рд╡рд┐рдзрд┐
рд╢реВрдиреНрдп рд╣реЛ рдЬрд╛рдПрдЧреАред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрд┐рддрдиреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпреЗ рдкреНрд░рдХрд╛рд░
рдиреНрдпреВрдЯреЙрдиреНрд╕реЙрдлреНрдЯ.рдЬреЙрди рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рд╣реИрдВ, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдмрд╣реБрдд рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЗ рд▓реЗрдЦрдХ рдХреЛ рд╕рдВрджреЗрд╣ рдерд╛ рдХрд┐ рдорд╛рдВрдЧреЗ рдЧрдП рддрддреНрд╡ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд░реАрдб рдСрдкрд░реЗрд╢рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╕рдордп рдЗрд╕реЗ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдлреЗрдВрдХрд╛ рдЧрдпрд╛ рдПрдХ рдЕрдкрд╡рд╛рдж рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдореЗрдВ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдиреЛрдб рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрд╛ рдбреАрд░рдлрд░реЗрдВрд╕ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЪреЗрдХ рдЬреЛрдбрд╝реЗрдВ рдпрджрд┐ рдиреЛрдб рдХрд╛ рдЧреИрд░-рдЕрд╕реНрддрд┐рддреНрд╡ рд╕рдордЧреНрд░ рддрд░реНрдХ рдХреЛ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рдорд┐рд▓рддрд╛ рд╣реИ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди)ред
рд╕рдорд╛рдзрд╛рди 1:
public static ContentElement Get(this ContentElement contentElement....) { .... var elementData = contentElement.Data[name] as JObject; if (elementData == null) { throw.... } .... }
рд╕рдорд╛рдзрд╛рди 2:
public override async Task LoadingAsync(LoadContentContext context) { .... context.ContentItem.Get<ContentPart>(typePartDefinition.Name) ?.Weld(fieldName, fieldActivator.CreateInstance()); .... }
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рд╕рдВрджреЗрд╢: V3080 рд╕рдВрднрд╛рд╡рд┐рдд
рдЕрд╢рдХреНрддрддрд╛ ред 'рдкрд░рд┐рдгрд╛рдореЛрдВ' рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред ContentQueryOrchardRazorHelperExtensions.cs 19
public static async Task<IEnumerable<ContentItem>> ContentQueryAsync(....) { var results = await orchardHelper.QueryAsync(queryName, parameters); .... foreach (var result in results) { .... } .... }
рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рдЙрджрд╛рд╣рд░рдг рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐
QueryAsync рд╡рд┐рдзрд┐ рдПрдХ рдЕрд╢рдХреНрдд рд╕рдВрджрд░реНрдн рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреА рд╣реИред рдпрд╣рд╛рдБ рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ:
public static async Task<IEnumerable> QueryAsync(....) { .... var query = await queryManager.GetQueryAsync(queryName); if (query == null) { return null; } .... }
рдЪреВрдВрдХрд┐
GetQueryAsync рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд┐рдзрд┐ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЦрд╛рд╕рдХрд░ рдЕрдЧрд░ рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
public async Task<Query> GetQueryAsync(string name) { var document = await GetDocumentAsync(); if(document.Queries.TryGetValue(name, out var query)) { return query; } return null; }
рдмрд╛рд╣рд░реА рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХреИрд╢ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдХрдИ рдХреЙрд▓
GetDocumentAsync рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдореБрд╢реНрдХрд┐рд▓
рдмрдирд╛рддреЗ рд╣реИрдВ , рддреЛ рдЪрд▓рд┐рдП рд╣рдо рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЪреЗрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рд╕рднреА рдФрд░ рдЕрдзрд┐рдХ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рдзрд┐ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИред
public static async Task<IEnumerable<ContentItem>> ContentQueryAsync(....) { var results = await orchardHelper.QueryAsync(queryName, parameters); if(results == null) throw ....; .... foreach (var result in results) { .... } .... }
рдирд┐рд╖реНрдХрд░реНрд╖рдореИрдВ рдСрд░реНрдЪрд░реНрдб рдХреЗ рдХреЛрдб рдХреА рдЙрдЪреНрдЪ рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛! рдпрд╣ рд╕рдЪ рд╣реИ рдХрд┐ рдХреБрдЫ рдЕрдиреНрдп рджреЛрд╖ рднреА рдереЗ, рдЬрд┐рдирдХреА рдореИрдВрдиреЗ рдпрд╣рд╛рдБ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдЧрдВрднреАрд░ рдХреАрдбрд╝реЗ рджрд┐рдЦрд╛рдИ рд╣реИрдВред рдмреЗрд╢рдХ, рдпрд╣ рдХрд╣рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рддреАрди рд╕рд╛рд▓ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдЕрдкрдиреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕реЗ
рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрдкрдХреЛ рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд▓рд╛рдн рдорд┐рд▓реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╡рд╣ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рд╡рд┐рдХрд╛рд╕ рдЪрд░рдгреЛрдВ рдореЗрдВ рдмрдЧ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдФрд░ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рджреЗрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдмрдЧ рдлрд┐рдХреНрд╕рд┐рдВрдЧ рд╕рдмрд╕реЗ рд╕рд╕реНрддрд╛ рдФрд░ рдЖрд╕рд╛рди рд╣реИред
рднрд▓реЗ рд╣реА рдПрдХ рдмрд╛рд░ рдХреЗ рдЪреЗрдХ рдмрд╣реБрдд рдорджрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рднреА рдореИрдВ рдЖрдкрдХреЛ
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдЗрд╕реЗ рдЖрдЬрдорд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ: рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рдХреАрдбрд╝реЗ рднреА рдорд┐рд▓реЗрдВрдЧреЗред