рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ
рд╣рдо рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдмрдирд╛рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред рд╣рдорд╛рд░рд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИ, рдЬреЛ рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╣реИред рд╣рдорд╛рд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреА рддреИрдирд╛рддреА рдореЗрдВ рд╕реБрд╡рд┐рдзрд╛ рд╣реЛрдЧреАред рдЕрдзрд┐рдХ рджреВрд░ рди рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЙрд╕реА рдЪреЙрдХрд▓реЗрдЯреА рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВред Azure DevOps рдПрдХ CI рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ред

рдХреНрд▓рд╛рдЙрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд╣рдорд╛рд░реЗ рдЕрдиреНрдп рд▓реЗрдЦреЛрдВ рдХреА рд╕реВрдЪреА рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╣реИ:

рдореИрдВ рдЖрдкрдХреЛ Azure DevOps рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрд╣рд▓реЗ рд▓реЗрдЦ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреБрдЫ рдмрд┐рдВрджреБрдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдирдХрд▓ рди рд╣реЛред

рддреЛ, рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдирд╛рдпрдХ:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЙрдкрдХрд░рдг рд╣реИ рдЬрд┐рд╕реЗ C, C++, C# рдФрд░ Java рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдкреНрд░реЛрдЧреНрд░рд╛рдореЛрдВ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред 64-рдмрд┐рдЯ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЪрд▓рддрд╛ рд╣реИ, рдФрд░ 32-рдмрд┐рдЯ, 64-рдмрд┐рдЯ рдФрд░ рдПрдореНрдмреЗрдбреЗрдб рдПрдЖрд░рдПрдо рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рд╕реНрдереИрддрд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рд╣рдо рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛ рдЬрд╛рдПрдВ рдПрдХ рд▓реЗрдЦ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рддреБрд░рдВрдд рджреЗрдЦрдиреЗ рдФрд░ рдЗрд╕ рдЯреВрд▓ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред

Azure DevOps - рдХреНрд▓рд╛рдЙрдб рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЬреЛ рд╕рдВрдпреБрдХреНрдд рд░реВрдк рд╕реЗ рд╕рдВрдкреВрд░реНрдг рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд╡рд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдореЗрдВ Azure рдкрд╛рдЗрдкрд▓рд╛рдЗрди, Azure рдмреЛрд░реНрдб, Azure Artifacts, Azure Repos, Azure рдЯреЗрд╕реНрдЯ рдкреНрд▓рд╛рди рдЬреИрд╕реЗ рдЯреВрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреЛ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред

chocolatey рд╡рд┐рдВрдбреЛрдЬрд╝ рдХреЗ рд▓рд┐рдП рдПрдХ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреИрдХреЗрдЬ рдореИрдиреЗрдЬрд░ рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд▓рдХреНрд╖реНрдп рд╡рд┐рдВрдбреЛрдЬрд╝ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕реЗ рд▓реЗрдХрд░ рдЕрдкрдбреЗрдЯ рдФрд░ рдЕрдирдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рддрдХ рдкреВрд░реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЬреАрд╡рдирдЪрдХреНрд░ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдирд╛ рд╣реИред

рдЪреЙрдХрд▓реЗрдЯреА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ

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

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢:

choco install pvs-studio

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдкреИрдХреЗрдЬ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрд╕реНрдХрд░рдг рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢:

choco install pvs-studio --version=7.05.35617.2075

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдХреЛрд░, рдХреЛрд░ рдШрдЯрдХ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдп рд╕рднреА рдлрд╝реНрд▓реИрдЧ (рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) рдХреЛ --package-parameters рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЬреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдЧрд╛:

choco install pvs-studio --package-parameters="'/MSVS2019'"

рдЖрдЗрдП рдЕрдм Azure DevOps рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЙрдкрдпреЛрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред

рд╕рдорд╛рдпреЛрдЬрди

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдПрдХ рд▓реЙрдиреНрдЪ рдЯреНрд░рд┐рдЧрд░ рд╕реЗрдЯ рдХрд░реЗрдВ, рдЬреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛:

trigger:
- master

рдЖрдЧреЗ рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрднреА рдХреЗ рд▓рд┐рдП рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ рд╕рд░реНрд╡рд░ 2019 рдФрд░ рд╡рд┐рдЬреБрдЕрд▓ рд╕реНрдЯреВрдбрд┐рдпреЛ 2019 рдХреЗ рд╕рд╛рде рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдЬреЗрдВрдЯ рд╣реЛрдЧрд╛:

pool:
  vmImage: 'windows-latest'

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдпрд╣ рдЪреБрдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдо рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХрд╣рд╛рдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдФрд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ.

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ

рд╕рдлрд▓ рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдХреЗ рдмрд╛рдж рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рд╕рдВрдЧрдарди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝реЗрдВ:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдЕрдм рдЖрдк рд╡рд┐рдВрдбреЛ рдореЗрдВ рдЪреЙрдХрд▓реЗрдЯреА рдХрд╛рд░реНрдп рдХрд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд╛рд░реНрдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╕рдордп рдиреАрд▓рд╛-рдкрд╛рдЗрдкрд▓рд╛рдЗрди.yml:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдЪреЙрдХрд▓реЗрдЯреА рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдлрд╝реАрд▓реНрдб рдХреА рд╕реВрдЪреА рджреЗрдЦреЗрдВ:

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ

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

steps:
- task: ChocolateyCommand@0
  inputs:
    command: 'install'
    installPackageId: 'pvs-studio'

рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдЗрдП рдЕрдкрдиреА рдлрд╝рд╛рдЗрд▓ рдХреЗ рдореБрдЦреНрдп рднрд╛рдЧ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ:

- task: CmdLine@2
  inputs:
    script: 

рдЕрдм рд╣рдореЗрдВ рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдпрд╣рд╛рдБ рдкреАрд╡реАрдПрд╕рдирд╛рдо ╨╕ рдкреА.рд╡реА.рдПрд╕.рдХреЗ.рдЖрдИ - рд╡реЗрд░рд┐рдПрдмрд▓реНрд╕ рдХреЗ рдирд╛рдо рдЬрд┐рдирдХреЗ рдорд╛рди рд╣рдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд▓реЙрдЧрд┐рди рдФрд░ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреБрдВрдЬреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдВрдЧреЗред рдЙрдирдХреЗ рдорд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрдиреВ рдЦреЛрд▓реЗрдВ рд╡реЗрд░рд┐рдПрдмрд▓->рдирдпрд╛ рд╡реЗрд░рд┐рдПрдмрд▓. рдЖрдЗрдП рд╡реЗрд░рд┐рдПрдмрд▓ рдмрдирд╛рдПрдВ рдкреАрд╡реАрдПрд╕рдирд╛рдо рд▓реЙрдЧрд┐рди рдХреЗ рд▓рд┐рдП рдФрд░ рдкреА.рд╡реА.рдПрд╕.рдХреЗ.рдЖрдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреБрдВрдЬреА рдХреЗ рд▓рд┐рдП. рдмреЙрдХреНрд╕ рдХреЛ рдЪреЗрдХ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рдЗрд╕ рдорд╛рди рдХреЛ рдЧреБрдкреНрдд рд░рдЦреЗрдВ рдХреЗ рд▓рд┐рдП рдкреА.рд╡реА.рдПрд╕.рдХреЗ.рдЖрдИ. рдХрдорд╛рдВрдб рдХреЛрдб:

╤Бall "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" credentials 
тАУu $(PVSNAME) тАУn $(PVSKEY)

рдЖрдЗрдП рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рдмреИрдЯ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ:

╤Бall build.bat

рдЖрдЗрдП рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдмрдирд╛рдПрдВ рдЬрд╣рд╛рдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╡рд╛рд▓реА рдлрд╝рд╛рдЗрд▓реЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рдПрдВрдЧреА:

╤Бall mkdir PVSTestResults

рдЖрдЗрдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░реЗрдВ:

╤Бall "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" 
тАУt .srcchocolatey.sln тАУo .PVSTestResultsChoco.plog 

рд╣рдо Plog╨бconverter рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ html рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:

╤Бall "C:Program Files (x86)PVS-StudioPlogConverter.exe" 
тАУt html тАУo PVSTestResults .PVSTestResultsChoco.plog

рдЕрдм рдЖрдкрдХреЛ рдПрдХ рдХрд╛рд░реНрдп рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ рдЖрдк рд░рд┐рдкреЛрд░реНрдЯ рдЕрдкрд▓реЛрдб рдХрд░ рд╕рдХреЗрдВред

- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: PVSTestResults
    artifactName: PVSTestResults
    condition: always()

рд╕рдВрдкреВрд░реНрдг рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрддреА рд╣реИ:

trigger:
- master

pool:
  vmImage: 'windows-latest'

steps:
- task: ChocolateyCommand@0
  inputs:
    command: 'install'
    installPackageId: 'pvs-studio'

- task: CmdLine@2
  inputs:
    script: |
      call "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" 
      credentials тАУu $(PVSNAME) тАУn $(PVSKEY)
      call build.bat
      call mkdir PVSTestResults
      call "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe" 
      тАУt .srcchocolatey.sln тАУo .PVSTestResultsChoco.plog
      call "C:Program Files (x86)PVS-StudioPlogConverter.exe" 
      тАУt html тАУo .PVSTestResults .PVSTestResultsChoco.plog

- task: PublishBuildArtifacts@1
  inputs:
    pathToPublish: PVSTestResults
    artifactName: PVSTestResults
    condition: always()

рдЖрдЗрдП рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рд╕рд╣реЗрдЬреЗрдВ->рд╕рд╣реЗрдЬреЗрдВ->рдЪрд▓рд╛рдПрдБ рдХрд╛рд░реНрдп рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП. рдЖрдЗрдП рдЯрд╛рд╕реНрдХ рдЯреИрдм рдкрд░ рдЬрд╛рдХрд░ рд░рд┐рдкреЛрд░реНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдЪреЙрдХрд▓реЗрдЯреА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ C# рдХреЛрдб рдХреА рдХреЗрд╡рд▓ 37615 рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реИрдВред рдЖрдЗрдП рдкрд╛рдИ рдЧрдИ рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рдирдЬрд░ рдбрд╛рд▓реЗрдВред

рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рдкрд░рд┐рдгрд╛рдо

рдЪреЗрддрд╛рд╡рдиреА N1

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3005 'рдкреНрд░рджрд╛рддрд╛' рд╡реИрд░рд┐рдПрдмрд▓ рд╕реНрд╡рдпрдВ рдХреЛ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред CrytpoHashProviderSpecs.cs 38

public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
  ....
  protected CryptoHashProvider Provider;
  ....
  public override void Context()
  {
    Provider = Provider = new CryptoHashProvider(FileSystem.Object);
  }
}

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

рдЪреЗрддрд╛рд╡рдиреА N2

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3093 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-480] '&' рдСрдкрд░реЗрдЯрд░ рджреЛрдиреЛрдВ рдСрдкрд░реЗрдВрдб рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИред рд╕рдВрднрд╡рддрдГ рдЗрд╕рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ '&&' рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо.рд╕реАрдПрд╕ 64

public static PlatformType get_platform()
{
  switch (Environment.OSVersion.Platform)
  {
    case PlatformID.MacOSX:
    {
      ....
    }
    case PlatformID.Unix:
    if(file_system.directory_exists("/Applications")
      & file_system.directory_exists("/System")
      & file_system.directory_exists("/Users")
      & file_system.directory_exists("/Volumes"))
      {
        return PlatformType.Mac;
      }
        else
          return PlatformType.Linux;
    default:
      return PlatformType.Windows;
  }
}

рдСрдкрд░реЗрдЯрд░ рдЕрдВрддрд░ & рдСрдкрд░реЗрдЯрд░ рд╕реЗ && рдХреНрдпрд╛ рд╡рд╣ рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХрд╛ рдмрд╛рдпрд╛рдВ рднрд╛рдЧ рд╣реИ рдЕрд╕рддреНрдп, рдлрд┐рд░ рднреА рджрд╛рдИрдВ рдУрд░ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рдПрдЧреА, рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╡рд┐рдзрд┐ рдХреЙрд▓ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ system.directory_рдореМрдЬреВрдж рд╣реИ.

рд╡рд┐рдЪрд╛рд░рд╛рдзреАрди рдЕрдВрд╢ рдореЗрдВ, рдпрд╣ рдПрдХ рдЫреЛрдЯреА рд╕реА рдЦрд╛рдореА рд╣реИред рд╣рд╛рдБ, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ & рдСрдкрд░реЗрдЯрд░ рдХреЛ && рдСрдкрд░реЗрдЯрд░ рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдХреЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рдХрд┐рд╕реА рднреА рдЪреАрдЬрд╝ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ, & рдФрд░ && рдХреЗ рдмреАрдЪ рднреНрд░рдо рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛рдПрдБ рдкреИрджрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рджрд╛рд╣рд┐рдиреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдЧрд▓рдд/рдЕрдорд╛рдиреНрдп рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рддреНрд░реБрдЯрд┐ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ, V3093 рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╣рдЪрд╛рдирд╛ рдЧрдпрд╛, рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ:

if ((k < nct) & (s[k] != 0.0))

рднрд▓реЗ рд╣реА рд╕реВрдЪрдХрд╛рдВрдХ k рдЧрд╝рд▓рдд рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рд╕рд░рдгреА рддрддреНрд╡ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ IndexOutOfRangeException.

рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдБ N3, N4

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3022 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд╢реЙрд░реНрдЯрдкреНрд░реЙрдореНрдкреНрдЯ' рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддреА рд╣реИред рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡рдкреНрд░реЙрдореНрдкреНрдЯ.рд╕реАрдПрд╕ 101
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3022 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'рд╢реЙрд░реНрдЯрдкреНрд░реЙрдореНрдкреНрдЯ' рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реЛрддреА рд╣реИред рдЗрдВрдЯрд░рдПрдХреНрдЯрд┐рд╡рдкреНрд░реЙрдореНрдкреНрдЯ.рд╕реАрдПрд╕ 105

public static string 
prompt_for_confirmation(.... bool shortPrompt = false, ....)
{
  ....
  if (shortPrompt)
  {
    var choicePrompt = choice.is_equal_to(defaultChoice) //1
    ?
    shortPrompt //2
    ?
    "[[{0}]{1}]".format_with(choice.Substring(0, 1).ToUpperInvariant(), //3
    choice.Substring(1,choice.Length - 1))
    :
    "[{0}]".format_with(choice.ToUpperInvariant()) //0
    : 
    shortPrompt //4
    ? 
    "[{0}]{1}".format_with(choice.Substring(0,1).ToUpperInvariant(), //5
    choice.Substring(1,choice.Length - 1)) 
    :
    choice; //0
    ....
  }
  ....
}

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдкреАрдЫреЗ рдПрдХ рдЕрдЬреАрдм рддрд░реНрдХ рд╣реИред рдЖрдЗрдП рдХрд░реАрдм рд╕реЗ рджреЗрдЦреЗрдВ: рдпрджрд┐ рд╡рд╣ рд╢рд░реНрдд рдкреВрд░реА рд╣реЛ рдЬрд╛рддреА рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рд╕рдВрдЦреНрдпрд╛ 1 рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рд╣рдо рд╢рд░реНрдд 2 рдкрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ, рдЬреЛ рд╣рдореЗрд╢рд╛ рд╣реЛрддреА рд╣реИ <strong>рдЙрджреНрджреЗрд╢реНрдп</strong>, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрдВрдХреНрддрд┐ 3 рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдпрджрд┐ рд╢рд░реНрдд 1 рдЧрд▓рдд рдирд┐рдХрд▓рддреА рд╣реИ, рддреЛ рд╣рдо рд╕рдВрдЦреНрдпрд╛ 4 рд╕реЗ рдЪрд┐рд╣реНрдирд┐рдд рд░реЗрдЦрд╛ рдкрд░ рдЬрд╛рдПрдВрдЧреЗ, рдЬрд┐рд╕рдореЗрдВ рд╢рд░реНрдд рднреА рд╣рдореЗрд╢рд╛ рд╣реЛрддреА рд╣реИ <strong>рдЙрджреНрджреЗрд╢реНрдп</strong>, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдкрдВрдХреНрддрд┐ 5 рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рдПрдЧреАред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЯрд┐рдкреНрдкрдгреА 0 рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рд╢рд░реНрддреЗрдВ рдХрднреА рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрдВрдЧреА, рдЬреЛ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдСрдкрд░реЗрд╢рди рдХрд╛ рдмрд┐рд▓реНрдХреБрд▓ рддрд░реНрдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЪреЗрддрд╛рд╡рдиреА N5

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3123 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-783] рд╢рд╛рдпрдж '?:' рдСрдкрд░реЗрдЯрд░ рдЕрдкреЗрдХреНрд╖рд╛ рд╕реЗ рднрд┐рдиреНрди рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдЗрд╕рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рд╕реЗ рдХрдо рд╣реИред рд╡рд┐рдХрд▓реНрдк.рд╕реАрдПрд╕ 1019

private static string GetArgumentName (...., string description)
{
  string[] nameStart;
  if (maxIndex == 1)
  {
    nameStart = new string[]{"{0:", "{"};
  }
  else
  {
    nameStart = new string[]{"{" + index + ":"};
  }
  for (int i = 0; i < nameStart.Length; ++i) 
  {
    int start, j = 0;
    do 
    {
      start = description.IndexOf (nameStart [i], j);
    } 
    while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false);
    ....
    return maxIndex == 1 ? "VALUE" : "VALUE" + (index + 1);
  }
}

рдбрд╛рдпрдЧреНрдиреЛрд╕реНрдЯрд┐рдХ рдиреЗ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛:

while (start >= 0 && j != 0 ? description [j++ - 1] == '{' : false)

рдЪрд░ рдХреЗ рдмрд╛рдж рд╕реЗ j рдЙрдкрд░реЛрдХреНрдд рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╢реВрдиреНрдп рд╕реЗ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЯрд░реНрдирд░реА рдСрдкрд░реЗрдЯрд░ рдорд╛рди рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ рдЕрд╕рддреНрдп. рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рдХрд╛рд░рдг, рд▓реВрдк рдХрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЛрдб рдХрд╛ рдпрд╣ рдЯреБрдХрдбрд╝рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рдЗрд░рд╛рджреЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдЪреЗрддрд╛рд╡рдиреА N6

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3022 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-571] рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ 'installedPackageVersions.Count != 1' рд╣рдореЗрд╢рд╛ рд╕рддреНрдп рд╣реИред NugetService.cs 1405

private void remove_nuget_cache_for_package(....)
{
  if (!config.AllVersions && installedPackageVersions.Count > 1)
  {
    const string allVersionsChoice = "All versions";
    if (installedPackageVersions.Count != 1)
    {
      choices.Add(allVersionsChoice);
    }
    ....
  }
  ....
}

рдпрд╣рд╛рдБ рдПрдХ рдЕрдЬреАрдм рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдерд┐рддрд┐ рд╣реИ: installPackageVersions.рдЧрд┐рдирддреА != 1рдЬреЛ рд╣рдореЗрд╢рд╛ рд░рд╣реЗрдЧрд╛ <strong>рдЙрджреНрджреЗрд╢реНрдп</strong>. рдЕрдХреНрд╕рд░ рдРрд╕реА рдЪреЗрддрд╛рд╡рдиреА рдХреЛрдб рдореЗрдВ рддрд╛рд░реНрдХрд┐рдХ рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИ, рдФрд░ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рдХреЗрд╡рд▓ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЬрд╛рдБрдЪ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддреА рд╣реИред

рдЪреЗрддрд╛рд╡рдиреА N7

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3001 '||' рдХреЗ рдмрд╛рдИрдВ рдФрд░ рджрд╛рдИрдВ рдУрд░ рд╕рдорд╛рди рдЙрдк-рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпрд╛рдБ 'commandArguments.contains("-apikey")' рд╣реИрдВред рдСрдкрд░реЗрдЯрд░ред ArgumentsUtility.cs 42

public static bool arguments_contain_sensitive_information(string
 commandArguments)
{
  return commandArguments.contains("-install-arguments-sensitive")
  || commandArguments.contains("-package-parameters-sensitive")
  || commandArguments.contains("apikey ")
  || commandArguments.contains("config ")
  || commandArguments.contains("push ")
  || commandArguments.contains("-p ")
  || commandArguments.contains("-p=")
  || commandArguments.contains("-password")
  || commandArguments.contains("-cp ")
  || commandArguments.contains("-cp=")
  || commandArguments.contains("-certpassword")
  || commandArguments.contains("-k ")
  || commandArguments.contains("-k=")
  || commandArguments.contains("-key ")
  || commandArguments.contains("-key=")
  || commandArguments.contains("-apikey")
  || commandArguments.contains("-api-key")
  || commandArguments.contains("-apikey")
  || commandArguments.contains("-api-key");
}

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

commandArguments.contains("-apikey=");
commandArguments.contains("-api-key=");

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

рдкреБрдирд╢реНрдЪ рдФрд░ рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдпрд╣ рддреНрд░реБрдЯрд┐ рдмрд╣реБ-рдкрдВрдХреНрддрд┐ рд╕реНрдерд┐рддрд┐ рдХреЗ рдЕрдВрдд рдореЗрдВ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ :)ред рдкреНрд░рдХрд╛рд╢рди рджреЗрдЦреЗрдВ"рдЕрдВрддрд┐рдо рдкрдВрдХреНрддрд┐ рдХрд╛ рдкреНрд░рднрд╛рд╡".

рдЪреЗрддрд╛рд╡рдиреА N8

рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА: V3095 [рд╕реАрдбрдмреНрд▓реНрдпреВрдИ-476] 'рдЗрдВрд╕реНрдЯрд╛рд▓реНрдбрдкреИрдХреЗрдЬ' рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реВрдиреНрдп рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╕рддреНрдпрд╛рдкрд┐рдд рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдкрдВрдХреНрддрд┐рдпрд╛рдБ рдЬрд╛рдБрдЪреЗрдВ: 910, 917. NugetService.cs 910

public virtual ConcurrentDictionary<string, PackageResult> get_outdated(....)
{
  ....
  var pinnedPackageResult = outdatedPackages.GetOrAdd(
    packageName, 
    new PackageResult(installedPackage, 
                      _fileSystem.combine_paths(
                        ApplicationParameters.PackagesLocation, 
                        installedPackage.Id)));
  ....
  if (   installedPackage != null
      && !string.IsNullOrWhiteSpace(installedPackage.Version.SpecialVersion) 
      && !config.UpgradeCommand.ExcludePrerelease)
  {
    ....
  }
  ....
}

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

рдирд┐рд╖реНрдХрд░реНрд╖

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

рд╣рдо рдЖрдкрдХреЛ рдЖрдордВрддреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЖрдЬрд╝рдорд╛рдПрдВред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рдирд┐рдпрдорд┐рдд рдЙрдкрдпреЛрдЧ рд╕реЗ рдЖрдкрдХреА рдЯреАрдо рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рд╣реЛрдЧрд╛ рдФрд░ рдХрдИ рдХреЛ рд░реЛрдХрдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреА рд╢реВрдиреНрдп рджрд┐рди рдХреА рдХрдордЬреЛрд░рд┐рдпрд╛рдБ.

рдкреБрдирд╢реНрдЪ

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

рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ

рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рднрд╛рд╖реА рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рд╡реНрд▓рд╛рджрд┐рд╕реНрд▓рд╛рд╡ рд╕реНрдЯреЛрд▓рд╛рд░реЛрд╡ред рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдЕрдм рдЪреЙрдХрд▓реЗрдЯреА рдореЗрдВ рд╣реИ: Azure DevOps рдХреЗ рддрд╣рдд рдЪреЙрдХрд▓реЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИ.

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ