.NET рдХреЛрд░ 3.0 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 6 рдХреА рдШреЛрд╖рдгрд╛

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





WPF рдФрд░ Windows рдкреНрд░рдкрддреНрд░ рдЕрджреНрдпрддрди


WPF рдЯреАрдо рдиреЗ рдЕрдм GitHub рдореЗрдВ WPF рдХреЛрдбрдмреЗрд╕ рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рдХрд╛рд╢рди рдХреЛ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╡реЗ рд╕рд┐рд░реНрдл рдкрдВрджреНрд░рд╣ рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ ред WPF рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП, рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рдирд╛рдо рдмрд╣реБрдд рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред


рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, 3.0 GA рдкрд░ рдпрд╛ рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдЕрднреА рднреА рдмреИрдХрд▓реЙрдЧ рдкрд░ рд╣реИрдВред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдЗрд╕ рдХреЛрдб рдХреА рд╕рднреА рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ WPF рд╕рдореБрджрд╛рдп рдХреЛ WPF рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдиреЗ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рднрд╛рдЧ рд▓реЗрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдмрдирд╛рддреА рд╣реИред рдЧреАрдерд╣рдм рдХреЗ рдХреБрдЫ рдореБрджреНрджреЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рд╕рдореБрджрд╛рдп рдХрд╛ рдЕрдкрдирд╛ рдЕрд▓рдЧ рдмреИрдХрд▓реЙрдЧ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рдорд╣рд╕реВрд╕ рдХрд░рдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдбрд╛рд░реНрдХ рдереАрдо, рд╢рд╛рдпрдж?


рдЕрд▓реНрдкрд╛рдЗрди рдбреЙрдХрдЯрд░ рдЫрд╡рд┐рдпрд╛рдВ


рдЕрдм Docker рдЪрд┐рддреНрд░ ARM64 рдкрд░ .NET Core рдФрд░ ASP.NET Core рджреЛрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИрдВред рд╡реЗ рдкрд╣рд▓реЗ рдХреЗрд╡рд▓ x64 рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдереЗред


рдирд┐рдореНрди рдЪрд┐рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ Dockerfile рдореЗрдВ рдпрд╛ Dockerfile docker pull рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:


  • docker pull mcr.microsoft.com/dotnet/core/runtime:3.0-alpine-arm64v8
  • docker pull mcr.microsoft.com/dotnet/core/aspnet:3.0-alpine-arm64v8

рдШрдЯрдирд╛ рдкрд╛рдЗрдк рдореЗрдВ рд╕реБрдзрд╛рд░


рдЗрд╡реЗрдВрдЯ рдкрд╛рдЗрдк рдЕрдм рдХрдИ рд╕рддреНрд░реЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк EventListener рдХреЗ рд╕рд╛рде рдЗрди-рдЗрд╡реЗрдВрдЯ рдХреА рдЦрдкрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдЙрдЯ-рдСрдл-рдкреНрд░реЛрд╕реЗрд╕ рдЗрд╡реЗрдВрдЯ рдкрд╛рдЗрдк рдХреНрд▓рд╛рдЗрдВрдЯ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдирдП рдкреВрд░реНрдг рдХрд╛рдЙрдВрдЯрд░ рдЬреЛрдбрд╝реЗ рдЧрдП:


  • рдЬреАрд╕реА рдореЗрдВ% рд╕рдордп
  • рдЬрдирд░рд▓ 0 рдвреЗрд░ рдХрд╛ рдЖрдХрд╛рд░
  • рдЬрдирд░рд▓ 1 рдвреЗрд░ рдХрд╛ рдЖрдХрд╛рд░
  • рдЬрдирд░рд▓ 2 рдвреЗрд░ рдХрд╛ рдЖрдХрд╛рд░
  • LOH рдвреЗрд░ рдЖрдХрд╛рд░
  • рдЖрд╡рдВрдЯрди рджрд░
  • рд╡рд┐рдзрд╛рдирд╕рднрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рднрд░реА рд╣реБрдИ
  • рдереНрд░реЗрдбрдкреВрд▓ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛
  • рдореЙрдирд┐рдЯрд░ рд▓реЙрдХ рдХреЙрдиреНрдЯреНрд░реИрдХреНрдЯ рд░реЗрдЯ
  • рдереНрд░реЗрдбрдкреВрд▓ рдХрд╛рд░реНрдп рдЖрдЗрдЯрдо рдХрддрд╛рд░
  • рдереНрд░реЗрдбрдкреВрд▓ рдиреЗ рдХрд╛рд░реНрдп рдЖрдЗрдЯрдо рджрд░ рдкреВрд░реА рдХреА

рдкреНрд░реЛрдлрд╛рдЗрд▓рд░ рдЕрдЯреИрдЪ рдЕрдм рдЙрд╕реА рдЗрд╡реЗрдВрдЯ рдкрд╛рдЗрдк рдЗрдВрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред


рдбреЗрд╡рд┐рдб рдлрд╛рдЙрд▓рд░ рд╕реЗ рдХрд╛рдЙрдВрдЯрд░реНрд╕ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рддреЗ рд╣реБрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдпрд╛ рдЖрд╡реЗрджрди рд╕реНрдерд┐рддрд┐ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╡реЗрдВрдЯ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рдбреЙрдЯрдиреЗрдЯ-рдХрд╛рдЙрдВрдЯрд░ рдЙрдкрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЙрдЯрдиреЗрдЯ-рдХрд╛рдЙрдВрдЯрд░ рджреЗрдЦреЗрдВред


ReadyToRun рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ .NET рдХреЛрд░ рдРрдкреНрд╕ рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХрд░реЗрдВ


рдЖрдк рдЕрдкрдиреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдХреЛ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд░ 2 рдЖрд░ рдЖрдЧреЗ рдХреЗ рд╕рдордп (рдПрдУрдЯреА) рд╕рдВрдХрд▓рди рдХрд╛ рдПрдХ рд░реВрдк рд╣реИред


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


R2 рдХреЛрд░ .NET рдХреЛрд░ 3.0 рдХреЗ рд╕рд╛рде рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ .NET рдХреЛрд░ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдирдореВрдирд╛ рдкреНрд░рджрд░реНрд╢рди рд╕рдВрдЦреНрдпрд╛


рдирдореВрдирд╛ WPF рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рдкреНрд░рджрд░реНрд╢рди рдирдВрдмрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВред рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЙрд╕рдиреЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд▓рд┐рдВрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ (рдмрд╛рдж рдореЗрдВ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛)ред


рдЖрдИрдПрд▓ рдХреЗрд╡рд▓ рдЖрд╡реЗрджрди:


  • рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп: 1.9 рд╕реЗрдХрдВрдб
  • рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ: 69.1 рдПрдордмреА
  • рдЖрд╡реЗрджрди рдХрд╛ рдЖрдХрд╛рд░: 150 рдПрдордмреА

ReadyToRun рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде:


  • рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп: 1.3 рд╕реЗрдХрдВрдбред
  • рдореЗрдореЛрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ: 55.7 рдПрдордмреА
  • рдЖрд╡реЗрджрди рдХрд╛ рдЖрдХрд╛рд░: 156 рдПрдордмреА

рд░реЗрдбреАрдСрдирд░реВрди рдЪрд┐рддреНрд░, рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛


рдЖрдк R2 рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рджреЛрдиреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдореЗрдВ, рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд░ 2 рдЖрд░ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдиреНрдпреБрдЧреЗрдЯ рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рддрд░рдг рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рд╣рдо рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рдкрд░рд┐рджреГрд╢реНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред


AOT рд╕рдВрдХрд▓рд┐рдд рдЕрд╕реЗрдВрдмрд▓реА рдПрдХ рд▓рдВрдмреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП .NET рдХреЗ рд╕рд╛рде рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, .NET рдлреНрд░реЗрдорд╡рд░реНрдХ рдФрд░ NGEN рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛ рд░рд╣рд╛ рд╣реИред NGEN рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрдореА рд╣реИ, рдЬреЛ рдпрд╣ рд╣реИ рдХрд┐ NGEN рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреНрд░рд╛рд╣рдХ рдорд╢реАрдиреЛрдВ рдкрд░ рд╕рдВрдХрд▓рди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рд▓реНрдб рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ NGEN рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред


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


рдЕрдиреБрдХреВрд▓рддрд╛ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ, ReadyToRun рдЫрд╡рд┐рдпрд╛рдВ IL рдЕрд╕реЗрдВрдмрд▓реА рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рдХреБрдЫ рдкреНрд░рдореБрдЦ рдЕрдВрддрд░ рд╣реИрдВред


  • IL рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдореЗрдВ рд╕рд┐рд░реНрдл IL рдХреЛрдб рд╣реЛрддрд╛ рд╣реИ ред рд╡реЗ рдХрд┐рд╕реА рднреА рд░рдирдЯрд╛рдЗрдо рдкрд░ рдЪрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЙрд╕ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЗ рд▓рд┐рдП рджрд┐рдП рдЧрдП рд▓рдХреНрд╖реНрдп рдврд╛рдВрдЪреЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ netstandard2.0 рдЕрд╕реЗрдВрдмрд▓реА .NET рдлреНрд░реЗрдорд╡рд░реНрдХ 4.6+ рдФрд░ .NET рдХреЛрд░ 2.0+, рдХрд┐рд╕реА рднреА рд╕рдорд░реНрдерд┐рдд рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо (рд╡рд┐рдВрдбреЛрдЬ, рдореИрдХрдУрдПрд╕, рд▓рд┐рдирдХреНрд╕) рдФрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ (рдЗрдВрдЯреЗрд▓, рдПрдЖрд░рдПрдо, 32-рдмрд┐рдЯ, 64-рдмрд┐рдЯ) рдкрд░ рдЪрд▓ рд╕рдХрддреА рд╣реИред
  • R2R рдЕрд╕реЗрдВрдмрд▓рд┐рдпреЛрдВ рдореЗрдВ IL рдФрд░ рджреЗрд╢реА рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВред рд╡реЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдиреНрдпреВрдирддрдо .NET рдХреЛрд░ рд░рдирдЯрд╛рдЗрдо рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг (RID) рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, NET рдХреЛрд░ 3.0 рдФрд░ рд▓рд┐рдирдХреНрд╕ x64 рдХреЗ рд▓рд┐рдП рдПрдХ netstandard2.0 рд╡рд┐рдзрд╛рдирд╕рднрд╛ R2R рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдЙрд╕ рдпрд╛ рдПрдХ рд╕рдВрдЧрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди (рдЬреИрд╕реЗ .NET рдХреЛрд░ 3.1 рдпрд╛ .NET рдХреЛрд░ 5.0, рд▓рд┐рдирдХреНрд╕ x64 рдкрд░) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдореВрд▓ рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдЙрд╕ рд░рдирдЯрд╛рдЗрдо рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╣реИред

рдЕрдиреБрджреЗрд╢


ReadyToRun рд╕рдВрдХрд▓рди рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд, рдСрдкреНрдЯ-рдЗрди рд╕реБрд╡рд┐рдзрд╛ рд╣реИред рд╣рдордиреЗ .NET рдХреЛрд░ 3.0 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 5 рдХреЗ рд╕рд╛рде рдЗрд╕рдХрд╛ рдПрдХ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рд╣реИред


ReadyToRun рд╕рдВрдХрд▓рди рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдирд┐рдореНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


  • PublishReadyToRun рдЧреБрдг рдХреЛ true рд╕реЗрдЯ рдХрд░реЗрдВред
  • рдПрдХ рд╕реНрдкрд╖реНрдЯ RuntimeIdentifier рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВред

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


рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:


 <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>netcoreapp3.0</TargetFramework> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup> </Project> 

рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ:


 dotnet publish -r win-x64 -c Release 

рдиреЛрдЯ: RuntimeIdentifier рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдиреЛрдЯ: ReadyToRun рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рд╣реИред рдмрд╛рдж рдХреЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рдЗрд╕реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ-рдирд┐рд░реНрднрд░ рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


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


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


 <ItemGroup> <PublishReadyToRunExclude Include="FilenameOfAssemblyToExclude.dll" /> </ItemGroup> 

рдкрд╛рд░ рдордВрдЪ / рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╕рдВрдХрд▓рди


ReadyToRun рд╕рдВрдХрд▓рдХ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреНрд░реЙрд╕-рд▓рдХреНрд╖реНрдпреАрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЖрдкрдХреЛ рджрд┐рдП рдЧрдП рд▓рдХреНрд╖реНрдп рдкрд░ рд╕рдВрдХрд▓рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк Windows x64 рдХреЗ рд▓рд┐рдП R2R рдЪрд┐рддреНрд░ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЖрджреЗрд╢ рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред


рдЗрд╕рдХреЗ рдЕрдкрд╡рд╛рдж:


  • Windows ARM64 рдХрд╛ рдЙрдкрдпреЛрдЧ Windows ARM32, ARM64 рдФрд░ x86 рдЪрд┐рддреНрд░реЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • Windows ARM86 рдХрд╛ рдЙрдкрдпреЛрдЧ Windows ARM32 рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рд▓рд┐рдирдХреНрд╕ ARM64 рдХрд╛ рдЙрдкрдпреЛрдЧ рд▓рд┐рдирдХреНрд╕ ARM32 рдФрд░ ARM64 рдЫрд╡рд┐рдпреЛрдВ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЕрд╕реЗрдВрдмрд▓реА рд▓рд┐рдВрдХрд┐рдВрдЧ


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


.NET рдХреЛрд░ рдХреЗ рд╕рд╛рде, рд╣рдореЗрд╢рд╛ рд╕реЗрд▓реНрдл-рдирд┐рд╣рд┐рдд рдРрдкреНрд╕ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдм рдХреБрдЫ рд╢рд╛рдорд┐рд▓ рд╣реЛрддрд╛ рд╣реИ, рддреИрдирд╛рддреА рдХреЗ рд▓рдХреНрд╖реНрдп рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП .NET рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ред рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдРрдк рдХреЛ рдХреЗрд╡рд▓ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдврд╛рдВрдЪреЗ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рдЙрдкрд╕рдореВрд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдХреЗ рд╕рдВрднрд╡рддрдГ рдЗрд╕реЗ рдмрд╣реБрдд рдЫреЛрдЯрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


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


рдЗрд╕ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ PublishTrimmed=true рдХреЛ рд╕реЗрдЯ рдХрд░реЗрдВ рдФрд░ рдПрдХ рд╕реНрд╡-рдирд┐рд╣рд┐рдд рдРрдк рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ:


 dotnet publish -r <rid> -c Release 

рдкреНрд░рдХрд╛рд╢рд┐рдд рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЙрд▓ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХрд╛ рд╕рдмрд╕реЗрдЯ рд╢рд╛рдорд┐рд▓ рд╣реЛрдЧрд╛ред рд╣реЗрд▓реЛрд╡рд░реНрд▓реНрдб рдРрдк рдХреЗ рд▓рд┐рдП, рд▓рд┐рдВрдХрд░ рдХрд╛ рдЖрдХрд╛рд░ ~ 68MB рд╕реЗ ~ 28MB рддрдХ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред


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


IL Linker рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП, рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рджреЗрдЦреЗрдВ рдпрд╛ рдореЛрдиреЛ / рд▓рд┐рдВрдХрд░ рд░реЗрдкреЛ рдкрд░ рдЬрд╛рдПрдБред


рдиреЛрдЯ: .NET рдХреЛрд░ рдХреЗ рдкрд┐рдЫрд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ, ILLink.Tasks рдХреЛ рдПрдХ рдмрд╛рд╣рд░реА NuGet рдкреИрдХреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдПрдХ рд╣реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдереАред рдпрд╣ рдЕрдм рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ - рдХреГрдкрдпрд╛ рдирд╡реАрдирддрдо 3.0 рдПрд╕рдбреАрдХреЗ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдирдпрд╛ рдЕрдиреБрднрд╡ рдЖрдЬрд╝рдорд╛рдПрдВ!


рдПрдХ рд╕рд╛рде рд▓рд┐рдВрдХрд░ рдФрд░ ReadToRun рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛


Linker рдФрд░ ReadyToRun рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд▓рд┐рдВрдХрд░ рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЫреЛрдЯрд╛ рдмрдирд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд░реЗрдбреА-рдЯреВ-рд░рди рдХрдВрдкрд╛рдЗрд▓рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдереЛрдбрд╝рд╛ рдмрдбрд╝рд╛ рдХрд░ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдЬреАрдд рдХреЗ рд╕рд╛рдеред рдпрд╣ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд╛рдпрдХ рд╣реИред


рдиреЛрдЯ: dotnet / sdk # 3257 рд▓рд┐рдВрдХрд░ рдФрд░ ReadyToRun рдХреЛ WPF рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдореЗрдЯ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрддрд╛ рд╣реИред рд╣рдо .NET рдХреЛрд░ 3.0 рд░рд┐рд▓реАрдЬ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред


рджреЗрд╢реА рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдХрд╛ рдирдореВрдирд╛


рдЯреАрдо рдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рдиреЗрдЯрд┐рд╡ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдирдореВрдирд╛ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ред рдпрд╣ рдПрдХ рдореВрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ .NET рдХреЛрд░ рдХреА рдореЗрдЬрдмрд╛рдиреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред


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


HttpClient рдореЗрдВ HTTP / 2 рд╕рдкреЛрд░реНрдЯ


HTTP / 2, HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрд╢реЛрдзрди рд╣реИред HTTP / 2 рдХреА рдХреБрдЫ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реЗрдбрд░ рдХрдВрдкреНрд░реЗрд╢рди рдФрд░ рдПрдХ рд╣реА рдХрдиреЗрдХреНрд╢рди рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рд╣реИрдВред рдЬрдмрдХрд┐ HTTP / 2 HTTP рдХреЗ рд╢рдмреНрджрд╛рд░реНрде (HTTP рд╣реЗрдбрд░, рдореЗрдердбреНрд╕ рдЗрддреНрдпрд╛рджрд┐) рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдпрд╣ HTTP / 1.x рд╕реЗ рдПрдХ рдкрд░рд┐рд╡рд░реНрддрди рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рдлрдВрд╕рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рддрд╛рд░ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред


HttpClient рдЕрдм HTTP / 2 рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ HTTP / 1.1 рд░рд╣рддрд╛ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ HTTP рдЕрдиреБрд░реЛрдз рд╕рдВрджреЗрд╢ рдкрд░ рд╕рдВрд╕реНрдХрд░рдг рд╕реЗрдЯ рдХрд░рдХреЗ HTTP / 2 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред


 var client = new HttpClient() { BaseAddress = new Uri("https://localhost:5001") }; // HTTP/1.1 request using (var response = await client.GetAsync("/")) { Console.WriteLine(response.Content); } // HTTP/2 request using (var request = new HttpRequestMessage(HttpMethod.Get, "/") { Version = new Version(2, 0) }) using (var response = await client.SendAsync(request)) { Console.WriteLine(response.Content); } 

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк HttpClient рдкрд░ DefaultRequestVersion рдЧреБрдг рд╕реЗрдЯ рдХрд░рдХреЗ HTTP / 2 рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 var client = new HttpClient() { BaseAddress = new Uri("https://localhost:5001"), DefaultRequestVersion = new Version(2, 0) }; // Defaults to HTTP/2 using (var response = await client.GetAsync("/")) { Console.WriteLine(response.Content); } 

рдлрд╝реНрд░реЗрдорд┐рдВрдЧ рдореЗрдВ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдкреНрд▓рд┐рдХреЗрд╢рди-рд▓реЗрдпрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдиреЗрдЧреЛрд╢рд┐рдПрд╢рди (ALPN) рдПрдХ TLS рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЕрдкрдиреЗ TLS рд╣реИрдВрдбрд╢реЗрдХ рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рдкреВрд░реНрд╡ рдЬреНрдЮрд╛рди рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ HTTP / 2 рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХреЗ рдХреЗ рд░реВрдк рдореЗрдВ ALPN рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЬреИрд╕реЗ, HTTP / 2 рдХреЛ рдХреЗрд╡рд▓ TLS рдХрдиреЗрдХреНрд╢рди рдкрд░ HttpClient рджреНрд╡рд╛рд░рд╛ рдмрд╛рддрдЪреАрдд рдХреА рдЬрд╛рддреА рд╣реИред


рд╡рд┐рдХрд╛рд╕ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдореЗрдВ рдЬрдм рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдкреНрд░рд╛рдердорд┐рдХ рдЬреНрдЮрд╛рди рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ HTTP / 2 рдХреЛ рдЕрдирдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдмреЛрд▓реЗрдВрдЧреЗ, рддреЛ рдЖрдк AppContext рд╕реНрд╡рд┐рдЪ рдпрд╛ рдПрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ ( DOTNET_SYSTEM_NET_HTTP_SOCKETSHTTPHANDLER_HTTP2UNENCRYPTEDSUPPORT=1 ) рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ HTTP / 2 рдХрдиреЗрдХреНрд╢рди AppContext рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


 AppContext.SetSwitch("System.Net.Http.SocketsHttpHandler.Http2UnencryptedSupport", true); 

рдЕрдВрдд


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


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


рдЙрд╕ рдиреЛрдЯ рдкрд░, рд╣рдо рдЬрд▓реНрдж рд╣реА master рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ .NET рдХреЛрд░ рд░рд┐рдкреЛрдЬ рдкрд░ рдЕрдЧрд▓реЗ рдкреНрд░рдореБрдЦ рд░рд┐рд▓реАрдЬ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╕рдВрднрд╡рдд: рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 7 рд░рд┐рд▓реАрдЬ (рдЬреБрд▓рд╛рдИ) рдХреЗ рдмрд╛рдж рдпрд╛ рдЙрд╕рдХреЗ рддреБрд░рдВрдд рдмрд╛рджред


.NET рдХреЛрд░ 3.0 рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рдо рдЖрдкрдХреА рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░, рд╣рдо рдЖрдкрдХреЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдЕрдВрддрд┐рдо рд░рд┐рд▓реАрдЬрд╝ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред




рд░рд┐рдЪрд░реНрдб рд▓реИрдВрдбрд░
рдкреАрдПрдо, .NET рдЯреАрдо

Source: https://habr.com/ru/post/hi456224/


All Articles