.NET рдХреЛрд░ 3.0 (рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди 6) рдХрд╛ рд╡рд┐рдореЛрдЪрди рдХрд┐рдпрд╛

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





WPF рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдлреЙрд░реНрдо рдЕрдкрдбреЗрдЯ


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


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


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


рдЕрдм 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

рдЗрд╡реЗрдВрдЯ рдкрд╛рдЗрдк рдПрдиреНрд╣рд╛рдВрд╕рдореЗрдВрдЯреНрд╕


рдЗрд╡реЗрдВрдЯ рдкрд╛рдЗрдк рдЕрдм рдорд▓реНрдЯреАрд╕реЗрд╢рдирд▓рд┐рдЯреА рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред


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


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

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


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


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


ReadyToRun Images рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ .NET рдХреЛрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░реЗрдВ


рдЖрдк ReadyToRun (R2R) рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрд┐рд▓реНрдб рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рдХреЗ .NET рдХреЛрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕рдордп рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрд░ 2 рдЖрд░ рдЕрдЧреНрд░рдгреА рд╕рдВрдХрд▓рди (рдПрдУрдЯреА) рдХрд╛ рдПрдХ рд░реВрдк рд╣реИред


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


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


рдирдореВрдирд╛ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдЖрдВрдХрдбрд╝реЗ


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


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


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

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


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

рд░реЗрдбрдЯреЙрд░реВрди рдЫрд╡рд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝реЗрдВ


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


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


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


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


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

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


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 рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЗрд╕реЗ рдмрд╛рдж рдХреА рдШреЛрд╖рдгрд╛ рдореЗрдВ рдлреНрд░реЗрдорд╡рд░реНрдХ-рдирд┐рд░реНрднрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ред


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


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


PublishReadyToRunExclude рддрддреНрд╡ рд╕рдореВрд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:


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

рдХреНрд░реЙрд╕-рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо / рд╡рд╛рд╕реНрддреБ рд╕рдВрдХрд▓рди


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


рдЕрдкрд╡рд╛рдж:


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

рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд▓реЗрдЖрдЙрдЯ


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


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


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


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


 dotnet publish -r <rid> -c Release 

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


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


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


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


рд▓рд┐рдВрдХрд░ рдФрд░ ReadToRun рд▓рд┐рдВрдХрд░ рд╢реЗрдпрд░рд┐рдВрдЧ


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


рдиреЛрдЯ: dotnet / sdk # 3257 рд▓рд┐рдВрдХрдХрд░реНрддрд╛ рдФрд░ WPT рдФрд░ Windows рдкреНрд░рдкрддреНрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП ReadyToRun рд╕рд╛рдЭрд╛рдХрд░рдг рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ .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); } 

рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЖрдк DefaultRequestVersion рдХреЛ HttpClient рд╕реЗрдЯ рдХрд░рдХреЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ 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 рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдЙрдирдХреЗ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рднрд╛рдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╕рдВрд╕реНрдХрд░рдг рдкрд░ рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЬреНрдпрд╛рджрд╛рддрд░ рд╕рд░реНрд╡рд░ рдХреЗрд╡рд▓ HTTP / 2 рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ ALPN рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, HTTP / 2 рдХреЛ рдХреЗрд╡рд▓ рдЯреАрдПрд▓рдПрд╕ рдХрдиреЗрдХреНрд╢рди рдкрд░ HttpClient рджреНрд╡рд╛рд░рд╛ рдмрд╛рддрдЪреАрдд рдХреА рдЬрд╛рддреА рд╣реИред


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


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

рд╕рдорд╛рдкрди


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


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


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


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

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


All Articles