PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจนเฉเจฃ เจšเจพเจ•เจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉˆ: Azure DevOps เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจคเฉ‹เจ‚ เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจนเฉเจฃ เจšเจพเจ•เจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉˆ: Azure DevOps เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจคเฉ‹เจ‚ เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ
เจ…เจธเฉ€เจ‚ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจฌเจฃเจพเจ‰เจฃเจพ เจœเจพเจฐเฉ€ เจฐเฉฑเจ–เจฆเฉ‡ เจนเจพเจ‚เฅค เจธเจพเจกเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจนเฉเจฃ Chocolatey เจตเจฟเฉฑเจš เจ‰เจชเจฒเจฌเจง เจนเฉˆ, เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจฒเจˆ เจ‡เฉฑเจ• เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐเฅค เจธเจพเจกเจพ เจฎเฉฐเจจเจฃเจพ เจนเฉˆ เจ•เจฟ เจ‡เจน PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจคเฉˆเจจเจพเจคเฉ€ เจฆเฉ€ เจธเจนเฉ‚เจฒเจค เจฆเฉ‡เจตเฉ‡เจ—เจพ, เจ–เจพเจธ เจคเฉŒเจฐ 'เจคเฉ‡, เจ•เจฒเจพเจ‰เจก เจธเฉ‡เจตเจพเจตเจพเจ‚ เจตเจฟเฉฑเจšเฅค เจฆเฉ‚เจฐ เจจเจพ เจœเจพเจฃ เจฒเจˆ, เจ†เจ“ เจ‰เจธเฉ‡ เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ‡ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ€เจเฅค Azure DevOps เจ‡เฉฑเจ• CI เจธเจฟเจธเจŸเจฎ เจตเจœเฉ‹เจ‚ เจ•เฉฐเจฎ เจ•เจฐเฉ‡เจ—เจพเฅค

เจ‡เฉฑเจฅเฉ‡ เจ•เจฒเจพเจ‰เจก เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจจเจพเจฒ เจเจ•เฉ€เจ•เจฐเจฃ เจฆเฉ‡ เจตเจฟเจธเจผเฉ‡ 'เจคเฉ‡ เจธเจพเจกเฉ‡ เจนเฉ‹เจฐ เจฒเฉ‡เจ–เจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจนเฉˆ:

เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ Azure DevOps เจจเจพเจฒ เจเจ•เฉ€เจ•เจฐเจฃ เจฌเจพเจฐเฉ‡ เจชเจนเจฟเจฒเฉ‡ เจฒเฉ‡เจ– เจตเฉฑเจฒ เจงเจฟเจ†เจจ เจฆเฉ‡เจฃ เจฆเฉ€ เจธเจฒเจพเจน เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ‚, เจ•เจฟเจ‰เจ‚เจ•เจฟ เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจ•เฉเจ เจจเฉเจ•เจคเฉ‡ เจ›เฉฑเจก เจฆเจฟเฉฑเจคเฉ‡ เจ—เจ เจนเจจ เจคเจพเจ‚ เจœเฉ‹ เจกเฉเจชเจฒเฉ€เจ•เฉ‡เจŸ เจจเจพ เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เฉ‡เฅค

เจ‡เจธ เจฒเจˆ, เจ‡เจธ เจฒเฉ‡เจ– เจฆเฉ‡ เจนเฉ€เจฐเฉ‹:

เจชเฉ€เจตเฉ€เจเจธ-เจธเจŸเฉ‚เจกเฉ€เจ“ เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจ•เฉ‹เจก เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจŸเฉ‚เจฒ เจนเฉˆ เจœเฉ‹ C, C++, C# เจ…เจคเฉ‡ Java เจตเจฟเฉฑเจš เจฒเจฟเจ–เฉ‡ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจพเจ‚ เจตเจฟเฉฑเจš เจคเจฐเฉเฉฑเจŸเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจธเฉฐเจญเจพเจตเฉ€ เจ•เจฎเจœเจผเฉ‹เจฐเฉ€เจ†เจ‚ เจฆเฉ€ เจชเจ›เจพเจฃ เจ•เจฐเจจ เจฒเจˆ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค 64-เจฌเจฟเฉฑเจŸ เจตเจฟเฉฐเจกเฉ‹เจœเจผ, เจฒเฉ€เจจเจ•เจธ, เจ…เจคเฉ‡ เจฎเฉˆเจ•เฉ‹เจธ เจธเจฟเจธเจŸเจฎเจพเจ‚ 'เจคเฉ‡ เจšเฉฑเจฒเจฆเจพ เจนเฉˆ, เจ…เจคเฉ‡ 32-เจฌเจฟเฉฑเจŸ, 64-เจฌเจฟเฉฑเจŸ, เจ…เจคเฉ‡ เจเจฎเจฌเฉˆเจก เจ•เฉ€เจคเฉ‡ ARM เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎเจพเจ‚ เจฒเจˆ เจกเจฟเจœเจผเจพเจˆเจจ เจ•เฉ€เจคเฉ‡ เจ•เฉ‹เจก เจฆเจพ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ•เจฐ เจธเจ•เจฆเจพ เจนเฉˆเฅค เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเฉ€ เจตเจพเจฐ เจ†เจชเจฃเฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเจจ เจฒเจˆ เจธเจฅเจฟเจฐ เจ•เฉ‹เจก เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐ เจฐเจนเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจธเจฟเจซเจผเจพเจฐเจฟเจธเจผ เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ†เจชเจฃเฉ‡ เจ†เจช เจจเฉ‚เฉฐ เจ‡เจธ เจคเฉ‹เจ‚ เจœเจพเจฃเฉ‚ เจ•เจฐเฉ‹ เจฒเฉ‡เจ– เจธเจญ เจคเฉ‹เจ‚ เจฆเจฟเจฒเจšเจธเจช PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจšเฉ‡เจคเจพเจตเจจเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผเฉ€ เจจเจพเจฒ เจ•เจฟเจตเฉ‡เจ‚ เจตเฉ‡เจ–เจฃเจพ เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธ เจŸเฉ‚เจฒ เจฆเฉ€เจ†เจ‚ เจธเจฎเจฐเฉฑเจฅเจพเจตเจพเจ‚ เจฆเจพ เจฎเฉเจฒเจพเจ‚เจ•เจฃ เจ•เจฐเจจเจพ เจนเฉˆเฅค

Azure DevOps - เจ•เจฒเจพเจ‰เจก เจธเฉ‡เจตเจพเจตเจพเจ‚ เจฆเจพ เจ‡เฉฑเจ• เจธเจฎเฉ‚เจน เจœเฉ‹ เจธเจพเจ‚เจเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจชเฉ‚เจฐเฉ€ เจตเจฟเจ•เจพเจธ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจ•เจตเจฐ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจตเจฟเฉฑเจš Azure Pipelines, Azure Boards, Azure Artifacts, Azure Repos, Azure Test Plans เจตเจฐเจ—เฉ‡ เจŸเฉ‚เจฒ เจธเจผเจพเจฎเจฒ เจนเจจ, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ‡เจธเจฆเฉ€ เจ—เฉเจฃเจตเฉฑเจคเจพ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเฉ‡ เจนเจจเฅค

เจšเฉˆเจ•เจ•เฉ€เจฒเฉ€ เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจฒเจˆ เจ‡เฉฑเจ• เจ“เจชเจจ เจธเฉ‹เจฐเจธ เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ เจนเฉˆเฅค เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจฆเจพ เจŸเฉ€เจšเจพ เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจ“เจชเจฐเฉ‡เจŸเจฟเฉฐเจ— เจธเจฟเจธเจŸเจฎเจพเจ‚ 'เจคเฉ‡ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจคเฉ‹เจ‚ เจฒเฉˆ เจ•เฉ‡ เจ…เจชเจกเฉ‡เจŸ เจ•เจฐเจจ เจ…เจคเฉ‡ เจ…เจฃเจ‡เฉฐเจธเจŸเฉŒเจฒเฉ‡เจธเจผเจจ เจคเฉฑเจ• เจชเฉ‚เจฐเฉ‡ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ เจœเฉ€เจตเจจ เจšเฉฑเจ•เจฐ เจจเฉ‚เฉฐ เจธเจตเฉˆเจšเจพเจฒเจค เจ•เจฐเจจเจพ เจนเฉˆเฅค

เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฌเจพเจฐเฉ‡

เจคเฉเจธเฉ€เจ‚ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ•เจฟ เจ‡เจธ 'เจคเฉ‡ เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ เจจเฉ‚เฉฐ เจ•เจฟเจตเฉ‡เจ‚ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเจจเจพ เจนเฉˆ เจฒเจฟเฉฐเจ• เจจเฉ‚เฉฐ. เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจชเฉ‚เจฐเฉ‡ เจฆเจธเจคเจพเจตเฉ‡เจœเจผ เจ‡เฉฑเจฅเฉ‡ เจ‰เจชเจฒเจฌเจง เจนเจจ เจฒเจฟเฉฐเจ• เจจเฉ‚เฉฐ Chocolatey เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ เจธเฉˆเจ•เจธเจผเจจ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจฆเฉ‡เจ–เฉ‹เฅค เจฎเฉˆเจ‚ เจ‰เจฅเฉ‹เจ‚ เจ•เฉเจ เจจเฉเจ•เจคเฉ‡ เจธเฉฐเจ–เฉ‡เจช เจตเจฟเฉฑเจš เจฆเฉเจนเจฐเจพเจตเจพเจ‚เจ—เจพเฅค

เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจฆเฉ‡ เจจเจตเฉ€เจจเจคเจฎ เจธเฉฐเจธเจ•เจฐเจฃ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ•เจฎเจพเจ‚เจก:

choco install pvs-studio

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจชเฉˆเจ•เฉ‡เจœ เจฆเฉ‡ เจ‡เฉฑเจ• เจ–เจพเจธ เจธเฉฐเจธเจ•เจฐเจฃ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจ•เจฎเจพเจ‚เจก:

choco install pvs-studio --version=7.05.35617.2075

เจฎเฉ‚เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš, เจ•เฉ‡เจตเจฒ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจฆเจพ เจ•เฉ‹เจฐ, เจ•เฉ‹เจฐ เจ•เฉฐเจชเฉ‹เจจเฉˆเจ‚เจŸ, เจธเจฅเจพเจชเจฟเจค เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจนเฉ‹เจฐ เจธเจพเจฐเฉ‡ เจซเจฒเฉˆเจ— (เจธเจŸเฉˆเจ‚เจกเจ…เจฒเฉ‹เจจ, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) --package-เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเจพเจธ เจ•เฉ€เจคเฉ‡ เจœเจพ เจธเจ•เจฆเฉ‡ เจนเจจเฅค

เจ‡เฉฑเจ• เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจœเฉ‹ เจตเจฟเจœเจผเฉ‚เจ…เจฒ เจธเจŸเฉ‚เจกเฉ€เจ“ 2019 เจฒเจˆ เจ‡เฉฑเจ• เจชเจฒเฉฑเจ—เจ‡เจจ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจธเจฅเจพเจชเจค เจ•เจฐเฉ‡เจ—เฉ€:

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

เจ†เจ‰ เจนเฉเจฃ Azure DevOps เจฆเฉ‡ เจ…เจงเฉ€เจจ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจฆเฉ€ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจตเจฐเจคเฉ‹เจ‚ เจฆเฉ€ เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจตเฉ‡เจ–เฉ€เจเฅค

เจตเจฟเจตเจธเจฅเจพ

เจฎเฉˆเจ‚ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฏเจพเจฆ เจฆเจฟเจตเจพเจ‰เจ‚เจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจ‡เฉฑเจ• เจ–เจพเจคเจพ เจฐเจœเจฟเจธเจŸเจฐ เจ•เจฐเจจเจพ, เจ‡เฉฑเจ• เจฌเจฟเจฒเจก เจชเจพเจˆเจชเจฒเจพเจˆเจจ เจฌเจฃเจพเจ‰เจฃเจพ เจ…เจคเฉ‡ GitHub เจฐเจฟเจชเฉ‹เจœเจผเจŸเจฐเฉ€ เจตเจฟเฉฑเจš เจธเจฅเจฟเจค เจ‡เฉฑเจ• เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจจเจพเจฒ เจคเฉเจนเจพเจกเฉ‡ เจ–เจพเจคเฉ‡ เจจเฉ‚เฉฐ เจธเจฟเฉฐเจ•เฉเจฐเฉ‹เจจเจพเจˆเจœเจผ เจ•เจฐเจจ เจตเจฐเจ—เฉ‡ เจฎเฉเฉฑเจฆเจฟเจ†เจ‚ เจฌเจพเจฐเฉ‡ เจ‡เฉฑเจ• เจตเฉฑเจ–เจฐเจพ เจธเฉˆเจ•เจธเจผเจจ เจนเฉˆเฅค เจฒเฉ‡เจ–. เจธเจพเจกเจพ เจธเฉˆเฉฑเจŸเจ…เฉฑเจช เจคเฉเจฐเฉฐเจค เจ‡เฉฑเจ• เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจ‡เจฒ เจฒเจฟเจ–เจฃ เจจเจพเจฒ เจธเจผเฉเจฐเฉ‚ เจนเฉ‹เจตเฉ‡เจ—เจพเฅค

เจชเจนเจฟเจฒเจพเจ‚, เจ†เจ“ เจ‡เฉฑเจ• เจฒเจพเจ‚เจš เจŸเฉเจฐเจฟเจ—เจฐ เจธเฉˆเจŸ เจ…เจช เจ•เจฐเฉ€เจ, เจ‡เจน เจฆเจฐเจธเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจธเจฟเจฐเจซ เจตเจฟเฉฑเจš เจคเจฌเจฆเฉ€เจฒเฉ€เจ†เจ‚ เจฒเจˆ เจฒเจพเจ‚เจš เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚ เจฎเจพเจธเจŸเจฐ เจธเจผเจพเจ–เจพ:

trigger:
- master

เจ…เฉฑเจ—เฉ‡ เจธเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ เจฆเฉ€ เจšเฉ‹เจฃ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ. เจนเฉเจฃ เจฒเจˆ เจ‡เจน เจตเจฟเฉฐเจกเฉ‹เจœเจผ เจธเจฐเจตเจฐ 2019 เจ…เจคเฉ‡ เจตเจฟเจœเจผเฉ‚เจ…เจฒ เจธเจŸเฉ‚เจกเฉ€เจ“ 2019 เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจฎเจพเจˆเจ•เฉเจฐเฉ‹เจธเจพเจซเจŸ-เจนเฉ‹เจธเจŸเจก เจเจœเฉฐเจŸ เจนเฉ‹เจตเฉ‡เจ—เจพ:

pool:
  vmImage: 'windows-latest'

เจ†เจ‰ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจ‡เจฒ เจฆเฉ‡ เจฎเฉเฉฑเจ– เจญเจพเจ— (เจฌเจฒเจพเจ• เจ•เจฆเจฎ). เจ‡เจธ เจคเฉฑเจฅ เจฆเฉ‡ เจฌเจพเจตเจœเฉ‚เจฆ เจ•เจฟ เจคเฉเจธเฉ€เจ‚ เจ‡เฉฑเจ• เจตเจฐเจšเฉเจ…เจฒ เจฎเจธเจผเฉ€เจจ เจตเจฟเฉฑเจš เจ†เจชเจนเฉเจฆเจฐเฉ‡ เจธเฉŒเจซเจŸเจตเฉ‡เจ…เจฐ เจจเฉ‚เฉฐ เจธเจฅเจพเจชเจฟเจค เจจเจนเฉ€เจ‚ เจ•เจฐ เจธเจ•เจฆเฉ‡, เจฎเฉˆเจ‚ เจ‡เฉฑเจ• เจกเฉŒเจ•เจฐ เจ•เฉฐเจŸเฉ‡เจจเจฐ เจจเจนเฉ€เจ‚ เจœเฉ‹เฉœเจฟเจ†. เจ…เจธเฉ€เจ‚ Azure DevOps เจฒเจˆ เจ‡เฉฑเจ• เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ เจตเจœเฉ‹เจ‚ Chocolatey เจจเฉ‚เฉฐ เจธเจผเจพเจฎเจฒ เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚เฅค เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, เจ†เจ“ เจšเจฒเฉ€เจ เจฒเจฟเฉฐเจ• เจจเฉ‚เฉฐ. เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹ เจ‡เจน เจฎเฉเจซเจค เจชเฉเจฐเจพเจชเจค เจ•เจฐเฉ‹. เจ…เฉฑเจ—เฉ‡, เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจนเฉ€ เจ…เจงเจฟเจ•เจพเจฐเจค เจนเฉ‹, เจคเจพเจ‚ เจฌเจธ เจ†เจชเจฃเจพ เจ–เจพเจคเจพ เจšเฉเจฃเฉ‹, เจ…เจคเฉ‡ เจœเฉ‡เจ•เจฐ เจจเจนเฉ€เจ‚, เจคเจพเจ‚ เจ…เจงเจฟเจ•เจพเจฐ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ เจ‰เจนเฉ€ เจ•เฉฐเจฎ เจ•เจฐเฉ‹เฅค

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจนเฉเจฃ เจšเจพเจ•เจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉˆ: Azure DevOps เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจคเฉ‹เจ‚ เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจ‡เฉฑเจฅเฉ‡ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เจน เจšเฉเจฃเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจ•เจฟ เจ…เจธเฉ€เจ‚ เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ เจ•เจฟเฉฑเจฅเฉ‡ เจœเฉ‹เฉœเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจฌเจŸเจจ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเฉ‹.

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจนเฉเจฃ เจšเจพเจ•เจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉˆ: Azure DevOps เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจคเฉ‹เจ‚ เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจธเจซเจฒ เจ‡เฉฐเจธเจŸเจพเจฒเฉ‡เจธเจผเจจ เจฆเฉ‡ เจฌเจพเจ…เจฆ, เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹ เจธเฉฐเจ—เจ เจจ เจจเฉ‚เฉฐ เจ…เฉฑเจ—เฉ‡ เจตเจงเฉ‹:

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจนเฉเจฃ เจšเจพเจ•เจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉˆ: Azure DevOps เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจคเฉ‹เจ‚ เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจคเฉเจธเฉ€เจ‚ เจนเฉเจฃ เจตเจฟเฉฐเจกเฉ‹ เจตเจฟเฉฑเจš เจšเจพเจ•เจฒเฉ‡เจŸ เจŸเจพเจธเจ• เจฒเจˆ เจŸเฉˆเจ‚เจชเจฒเฉ‡เจŸ เจฆเฉ‡เจ– เจธเจ•เจฆเฉ‡ เจนเฉ‹ เจ•เฉฐเจฎ เจ‡เฉฑเจ• เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจ‡เจฒ เจจเฉ‚เฉฐ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ azure-pipelines.yml:

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจนเฉเจฃ เจšเจพเจ•เจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉˆ: Azure DevOps เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจคเฉ‹เจ‚ เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจšเจพเจ•เจฒเฉ‡เจŸ 'เจคเฉ‡ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ‹ เจ…เจคเฉ‡ เจ–เฉ‡เจคเจฐเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจตเฉ‡เจ–เฉ‹:

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจนเฉเจฃ เจšเจพเจ•เจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉˆ: Azure DevOps เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจคเฉ‹เจ‚ เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจ‡เฉฑเจฅเฉ‡ เจธเจพเจจเฉ‚เฉฐ เจšเฉ‹เจฃ เจ•เจฐเจจ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆ เจ‡เฉฐเจธเจŸเจพเจฒ เจ•เจฐเฉ‹ เจŸเฉ€เจฎเจพเจ‚ เจจเจพเจฒ เจฎเฉˆเจฆเจพเจจ เจตเจฟเฉฑเจšเฅค IN Nuspec เจซเจพเจˆเจฒ เจฆเจพ เจจเจพเจฎ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจชเฉˆเจ•เฉ‡เจœ เจฆเจพ เจจเจพเจฎ เจฆเฉฑเจธเฉ‹ - pvs-studio. เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจธเฉฐเจธเจ•เจฐเจฃ เจจเจฟเจฐเจงเจพเจฐเจค เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจจเจตเฉ€เจจเจคเจฎ เจ‡เฉฑเจ• เจธเจฅเจพเจชเจฟเจค เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ, เจœเฉ‹ เจธเจพเจกเฉ‡ เจฒเจˆ เจชเฉ‚เจฐเฉ€ เจคเจฐเฉเจนเจพเจ‚ เจ…เจจเฉเจ•เฉ‚เจฒ เจนเฉˆเฅค เจ†เจ“ เจฌเจŸเจจ เจฆเจฌเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ เจœเฉ‹เจกเจผเจจ เจ…เจคเฉ‡ เจ…เจธเฉ€เจ‚ เจธเฉฐเจฐเจšเจจเจพ เจซเจพเจ‡เจฒ เจตเจฟเฉฑเจš เจœเจจเจฐเฉ‡เจŸ เจ•เฉ€เจคเฉ‡ เจŸเจพเจธเจ• เจจเฉ‚เฉฐ เจตเฉ‡เจ–เจพเจ‚เจ—เฉ‡เฅค

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

เจ…เฉฑเจ—เฉ‡, เจ†เจ“ เจ†เจชเจฃเฉ€ เจซเจพเจˆเจฒ เจฆเฉ‡ เจฎเฉเฉฑเจ– เจนเจฟเฉฑเจธเฉ‡ เจตเฉฑเจฒ เจตเจงเฉ€เจ:

- task: CmdLine@2
  inputs:
    script: 

เจนเฉเจฃ เจธเจพเจจเฉ‚เฉฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจฒเจพเจ‡เจธเฉˆเจ‚เจธ เจจเจพเจฒ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจฌเจฃเจพเจ‰เจฃ เจฆเฉ€ เจœเจผเจฐเฉ‚เจฐเจค เจนเฉˆ. เจ‡เจฅเฉ‡ PVSNAME ะธ PVSKEY - เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจจเจพเจฎ เจœเจฟเจจเฉเจนเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒ เจ…เจธเฉ€เจ‚ เจธเฉˆเจŸเจฟเฉฐเจ—เจพเจ‚ เจตเจฟเฉฑเจš เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจฆเฉ‡ เจนเจพเจ‚เฅค เจ‰เจน PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฒเจพเจ—เจ‡เจจ เจ…เจคเฉ‡ เจฒเจพเจ‡เจธเฉฐเจธ เจ•เฉเฉฐเจœเฉ€ เจจเฉ‚เฉฐ เจธเจŸเฉ‹เจฐ เจ•เจฐเจจเจ—เฉ‡เฅค เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจฎเฉเฉฑเจฒ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฒเจˆ, เจฎเฉ€เจจเฉ‚ เจ–เฉ‹เจฒเฉเจนเฉ‹ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ->เจจเจตเจพเจ‚ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ. เจšเจฒเฉ‹ เจตเฉ‡เจฐเฉ€เจเจฌเจฒ เจฌเจฃเจพเจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚ PVSNAME เจฒเจพเจ—เจ‡เจจ เจฒเจˆ เจ…เจคเฉ‡ PVSKEY เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจ•เฉเฉฐเจœเฉ€ เจฒเจˆ. เจฌเจพเจ•เจธ เจจเฉ‚เฉฐ เจšเฉˆเฉฑเจ• เจ•เจฐเจจเจพ เจจเจพ เจญเฉเฉฑเจฒเฉ‹ เจ‡เจธ เจฎเฉเฉฑเจฒ เจจเฉ‚เฉฐ เจ—เฉเจชเจค เจฐเฉฑเจ–เฉ‹ เจจเฉ‚เฉฐ PVSKEY. เจ•เจฎเจพเจ‚เจก เจ•เฉ‹เจก:

ั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 

เจ…เจธเฉ€เจ‚ PlogConverter เจ‰เจชเจฏเฉ‹เจ—เจคเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจ†เจชเจฃเฉ€ เจฐเจฟเจชเฉ‹เจฐเจŸ เจจเฉ‚เฉฐ 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()

เจ†เจ“ เจ•เจฒเจฟเฉฑเจ• เจ•เจฐเฉ€เจ เจธเฉ‡เจต->เจธเฉ‡เจต->เจšเจฒเจพเจ“ เจ•เฉฐเจฎ เจจเฉ‚เฉฐ เจšเจฒเจพเจ‰เจฃ เจฒเจˆ. เจ†เจ‰ เจŸเจพเจธเจ• เจŸเฉˆเจฌ 'เจคเฉ‡ เจœเจพ เจ•เฉ‡ เจฐเจฟเจชเฉ‹เจฐเจŸ เจจเฉ‚เฉฐ เจกเจพเจŠเจจเจฒเฉ‹เจก เจ•เจฐเฉ€เจเฅค

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจนเฉเจฃ เจšเจพเจ•เจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉˆ: 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 [CWE-480] '&' เจ†เจชเจฐเฉ‡เจŸเจฐ เจฆเฉ‹เจตเจพเจ‚ เจ“เจชเจฐเฉ‡เจกเจพเจ‚ เจฆเจพ เจฎเฉเจฒเจพเจ‚เจ•เจฃ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจธเจผเจพเจ‡เจฆ เจ‡เฉฑเจ• เจธเจผเจพเจฐเจŸ-เจธเจฐเจ•เจŸ '&&' เจ†เจชเจฐเฉ‡เจŸเจฐ เจฆเฉ€ เจฌเจœเจพเจ เจตเจฐเจคเจฟเจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆเฅค Platform.cs 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_exists.

เจตเจฟเจšเจพเจฐเฉ‡ เจ—เจ เจŸเฉเจ•เฉœเฉ‡ เจตเจฟเฉฑเจš, เจ‡เจน เจ‡เฉฑเจ• เจฎเจพเจฎเฉ‚เจฒเฉ€ เจจเฉเจ•เจธ เจนเฉˆเฅค เจนเจพเจ‚, & operator เจจเฉ‚เฉฐ && เจ†เจชเจฐเฉ‡เจŸเจฐ เจจเจพเจฒ เจฌเจฆเจฒ เจ•เฉ‡ เจ‡เจธ เจธเจฅเจฟเจคเฉ€ เจจเฉ‚เฉฐ เจ…เจจเฉเจ•เฉ‚เจฒ เจฌเจฃเจพเจ‡เจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจชเจฐ เจตเจฟเจนเจพเจฐเจ• เจฆเฉเจฐเจฟเจธเจผเจŸเฉ€เจ•เฉ‹เจฃ เจคเฉ‹เจ‚, เจ‡เจน เจ•เจฟเจธเฉ‡ เจตเฉ€ เจšเฉ€เจœเจผ เจจเฉ‚เฉฐ เจชเฉเจฐเจญเจพเจตเจฟเจค เจจเจนเฉ€เจ‚ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจนเจพเจฒเจพเจ‚เจ•เจฟ, เจฆเฉ‚เจœเฉ‡ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš, & เจ…เจคเฉ‡ && เจตเจฟเจšเจ•เจพเจฐ เจ‰เจฒเจเจฃ เจ—เฉฐเจญเฉ€เจฐ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจชเฉˆเจฆเจพ เจ•เจฐ เจธเจ•เจฆเฉ€ เจนเฉˆ เจœเจฆเฉ‹เจ‚ เจธเจฎเฉ€เจ•เจฐเจจ เจฆเฉ‡ เจธเฉฑเจœเฉ‡ เจชเจพเจธเฉ‡ เจจเฉ‚เฉฐ เจ—เจฒเจค/เจ…เจตเฉˆเจง เจฎเฉเฉฑเจฒเจพเจ‚ เจจเจพเจฒ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจธเจพเจกเฉ‡ เจ—เจฒเจคเฉ€ เจธเฉฐเจ—เฉเจฐเจนเจฟ เจตเจฟเฉฑเจš, V3093 เจกเจพเจ‡เจ—เจจเฉŒเจธเจŸเจฟเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจชเจ›เจพเจฃ เจ•เฉ€เจคเฉ€ เจ—เจˆ, เจ‡เจน เจ•เฉ‡เจธ เจนเฉˆ:

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

เจญเจพเจตเฉ‡เจ‚ เจธเฉ‚เจšเจ•เจพเจ‚เจ• k เจ—เจฒเจค เจนเฉˆ, เจ‡เจธเจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจเจฐเฉ‡ เจเจฒเฉ€เจฎเฉˆเจ‚เจŸ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ•เจฐเจจ เจฒเจˆ เจ•เฉ€เจคเฉ€ เจœเจพเจตเฉ‡เจ—เฉ€เฅค เจจเจคเฉ€เจœเฉ‡ เจตเจœเฉ‹เจ‚, เจ‡เฉฑเจ• เจ…เจชเจตเจพเจฆ เจฆเจฟเฉฑเจคเจพ เจœเจพเจตเฉ‡เจ—เจพ IndexOutOfRangeException.

เจšเฉ‡เจคเจพเจตเจจเฉ€เจ†เจ‚ N3, N4

เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจšเฉ‡เจคเจพเจตเจจเฉ€: V3022 [CWE-571] เจธเจฎเฉ€เจ•เจฐเจจ 'shortPrompt' เจนเจฎเฉ‡เจธเจผเจพ เจธเฉฑเจš เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค InteractivePrompt.cs 101
เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจšเฉ‡เจคเจพเจตเจจเฉ€: V3022 [CWE-571] เจธเจฎเฉ€เจ•เจฐเจจ 'shortPrompt' เจนเจฎเฉ‡เจธเจผเจพ เจธเฉฑเจš เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค InteractivePrompt.cs 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 'เจคเฉ‡ เจœเจพเจตเจพเจ‚เจ—เฉ‡, เจœเฉ‹ เจนเจฎเฉ‡เจธเจผเจพ เจ‡เจน เจธเฉฑเจš เจนเฉˆ,, เจœเจฟเจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจฒเจพเจˆเจจ 3 เจจเฉ‚เฉฐ เจšเจฒเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพเฅค เจœเฉ‡เจ•เจฐ เจธเจผเจฐเจค 1 เจ—เจฒเจค เจจเจฟเจ•เจฒเจฆเฉ€ เจนเฉˆ, เจคเจพเจ‚ เจ…เจธเฉ€เจ‚ เจจเฉฐเจฌเจฐ 4 เจจเจพเจฒ เจšเจฟเฉฐเจจเฉเจนเจฟเจค เจฒเจพเจˆเจจ 'เจคเฉ‡ เจœเจพเจตเจพเจ‚เจ—เฉ‡, เจ‰เจน เจธเจฅเจฟเจคเฉ€ เจœเจฟเจธ เจตเจฟเฉฑเจš เจตเฉ€ เจนเจฎเฉ‡เจธเจผเจพ เจนเฉเฉฐเจฆเจพ เจนเฉˆเฅค เจ‡เจน เจธเฉฑเจš เจนเฉˆ,, เจœเจฟเจธเจฆเจพ เจฎเจคเจฒเจฌ เจนเฉˆ เจ•เจฟ เจฒเจพเจˆเจจ 5 เจจเฉ‚เฉฐ เจšเจฒเจพเจ‡เจ† เจœเจพเจตเฉ‡เจ—เจพเฅค เจ‡เจธ เจคเจฐเฉเจนเจพเจ‚, เจŸเจฟเฉฑเจชเจฃเฉ€ 0 เจจเจพเจฒ เจšเจฟเฉฐเจจเฉเจนเจฟเจค เจธเจผเจฐเจคเจพเจ‚ เจ•เจฆเฉ‡ เจตเฉ€ เจชเฉ‚เจฐเฉ€เจ†เจ‚ เจจเจนเฉ€เจ‚ เจนเฉ‹เจฃเจ—เฉ€เจ†เจ‚, เจœเฉ‹ เจ•เจฟ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฐ เจฆเฉเจ†เจฐเจพ เจ‰เจฎเฉ€เจฆ เจ•เฉ€เจคเฉ€ เจ—เจˆ เจ•เจพเจฐเจตเจพเจˆ เจฆเจพ เจฌเจฟเจฒเจ•เฉเจฒ เจคเจฐเจ• เจจเจนเฉ€เจ‚ เจนเฉ‹ เจธเจ•เจฆเจพ เจนเฉˆเฅค

เจšเฉ‡เจคเจพเจตเจจเฉ€ N5

เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจšเฉ‡เจคเจพเจตเจจเฉ€: V3123 [CWE-783] เจธเจผเจพเจ‡เจฆ '?:' เจ†เจชเจฐเฉ‡เจŸเจฐ เจ‰เจฎเฉ€เจฆ เจจเจพเจฒเฉ‹เจ‚ เจตเฉฑเจ–เจฐเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจ‡เจธเจฆเฉ€ เจคเจฐเจœเฉ€เจน เจ‡เจธเจฆเฉ€ เจธเจฅเจฟเจคเฉ€ เจตเจฟเฉฑเจš เจฆเฉ‚เจœเฉ‡ เจ†เจชเจฐเฉ‡เจŸเจฐเจพเจ‚ เจฆเฉ€ เจคเจฐเจœเฉ€เจน เจจเจพเจฒเฉ‹เจ‚ เจ˜เฉฑเจŸ เจนเฉˆเฅค Options.cs 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 [CWE-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);
    }
    ....
  }
  ....
}

เจ‡เฉฑเจฅเฉ‡ เจ‡เฉฑเจ• เจ…เจœเฉ€เจฌ เจจเฉ‡เจธเจŸเจก เจธเจฅเจฟเจคเฉ€ เจนเฉˆ: เจ‡เฉฐเจธเจŸเจพเจฒ เจชเฉˆเจ•เจœ เจตเจฐเจœเจผเจจ. เจ•เจพเจ‰เจ‚เจŸ!= 1เจœเฉ‹ เจนเจฎเฉ‡เจธเจผเจพ เจฐเจนเฉ‡เจ—เจพ เจ‡เจน เจธเฉฑเจš เจนเฉˆ,. เจ…เจ•เจธเจฐ เจ…เจœเจฟเจนเฉ€ เจšเฉ‡เจคเจพเจตเจจเฉ€ เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจฒเจพเจœเจผเฉ€เจ•เจฒ เจ—เจฒเจคเฉ€ เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจฆเฉ‚เจœเฉ‡ เจฎเจพเจฎเจฒเจฟเจ†เจ‚ เจตเจฟเฉฑเจš เจ‡เจน เจธเจฟเจฐเจซเจผ เจฌเฉ‡เจฒเฉ‹เฉœเฉ€ เจœเจพเจ‚เจš เจจเฉ‚เฉฐ เจฆเจฐเจธเจพเจ‰เจ‚เจฆเฉ€ เจนเฉˆเฅค

เจšเฉ‡เจคเจพเจตเจจเฉ€ 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");
}

เจ•เฉ‹เจก เจฆเฉ‡ เจ‡เจธ เจญเจพเจ— เจจเฉ‚เฉฐ เจฒเจฟเจ–เจฃ เจตเจพเจฒเฉ‡ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฐ เจจเฉ‡ เจ†เจ–เจฐเฉ€ เจฆเฉ‹ เจฒเจพเจˆเจจเจพเจ‚ เจจเฉ‚เฉฐ เจ•เจพเจชเฉ€ เจ…เจคเฉ‡ เจชเฉ‡เจธเจŸ เจ•เฉ€เจคเจพ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจธเฉฐเจชเจพเจฆเจฟเจค เจ•เจฐเจจเจพ เจญเฉเฉฑเจฒ เจ—เจฟเจ†เฅค เจ‡เจธ เจ•เจพเจฐเจจ, เจšเจพเจ•เจฒเฉ‡เจŸ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจตเจฟเฉฑเจš เจ…เจธเจฎเจฐเฉฑเจฅ เจธเจจ apikey เจ•เฉเจ เจนเฉ‹เจฐ เจคเจฐเฉ€เจ•เฉ‡เฅค เจ‰เจชเจฐเฉ‹เจ•เจค เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจฆเฉ‡ เจธเจฎเจพเจจ, เจฎเฉˆเจ‚ เจนเฉ‡เจ เจพเจ‚ เจฆเจฟเฉฑเจคเฉ‡ เจตเจฟเจ•เจฒเจชเจพเจ‚ เจฆเฉ€ เจชเฉ‡เจธเจผเจ•เจธเจผ เจ•เจฐ เจธเจ•เจฆเจพ เจนเจพเจ‚:

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

เจ•เจพเจชเฉ€-เจชเฉ‡เจธเจŸ เจฆเฉ€เจ†เจ‚ เจ—เจฒเจคเฉ€เจ†เจ‚ เจฆเฉ‡ เจธเจฐเฉ‹เจค เจ•เฉ‹เจก เจฆเฉ€ เจ‡เฉฑเจ• เจตเฉฑเจกเฉ€ เจฎเจพเจคเจฐเจพ เจตเจพเจฒเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ เจตเจฟเฉฑเจš เจœเจฒเจฆเฉ€ เจœเจพเจ‚ เจฌเจพเจ…เจฆ เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡เจฃ เจฆเฉ€ เจ‰เฉฑเจš เจธเฉฐเจญเจพเจตเจจเจพ เจนเฉเฉฐเจฆเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเจพ เจฎเฉเจ•เจพเจฌเจฒเจพ เจ•เจฐเจจ เจฒเจˆ เจ‡เฉฑเจ• เจตเจงเฉ€เจ† เจธเจพเจงเจจ เจธเจฅเจฟเจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจนเฉˆเฅค

PS เจ…เจคเฉ‡ เจนเจฎเฉ‡เจธเจผเจพเจ‚ เจตเจพเจ‚เจ—, เจ‡เจน เจ—เจฒเจคเฉ€ เจ‡เฉฑเจ• เจฌเจนเฉ-เจฒเจพเจˆเจจ เจธเจฅเจฟเจคเฉ€ เจฆเฉ‡ เจ…เฉฐเจค เจตเจฟเฉฑเจš เจฆเจฟเจ–เจพเจˆ เจฆเจฟเฉฐเจฆเฉ€ เจนเฉˆ :). เจชเฉเจฐเจ•เจพเจธเจผเจจ เจตเฉ‡เจ–เฉ‹ "เจ†เจ–เจฐเฉ€ เจฒเจพเจˆเจจ เจชเฉเจฐเจญเจพเจต".

เจšเฉ‡เจคเจพเจตเจจเฉ€ N8

เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจšเฉ‡เจคเจพเจตเจจเฉ€: V3095 [CWE-476] 'installedPackage' เจตเจธเจคเฉ‚ เจจเฉ‚เฉฐ null เจฆเฉ‡ เจตเจฟเจฐเฉเฉฑเจง เจชเฉเจฐเจฎเจพเจฃเจฟเจค เจ•เจฐเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚ เจตเจฐเจคเจฟเจ† เจ—เจฟเจ† เจธเฉ€เฅค เจฒเจพเจˆเจจเจพเจ‚ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐเฉ‹: 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)
  {
    ....
  }
  ....
}

เจ•เจฒเจพเจธเจฟเจ• เจ—เจฒเจคเฉ€: เจชเจนเจฟเจฒเจพเจ‚ เจตเจธเจคเฉ‚ เจ‡เฉฐเจธเจŸเจพเจฒ เจชเฉˆเจ•เฉ‡เจœ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ เจซเจฟเจฐ เจœเจพเจ‚เจš เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ null. เจ‡เจน เจกเจพเจ‡เจ—เจจเฉŒเจธเจŸเจฟเจ• เจธเจพเจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎ เจตเจฟเฉฑเจš เจฆเฉ‹ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจตเจฟเฉฑเจšเฉ‹เจ‚ เจ‡เฉฑเจ• เจฌเจพเจฐเฉ‡ เจฆเฉฑเจธเจฆเจพ เจนเฉˆ: เจœเจพเจ‚ เจคเจพเจ‚ เจ‡เฉฐเจธเจŸเจพเจฒ เจชเฉˆเจ•เฉ‡เจœ เจ•เจฆเฉ‡ เจฌเจฐเจพเจฌเจฐ null, เจœเฉ‹ เจ•เจฟ เจธเจผเฉฑเจ•เฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจซเจฟเจฐ เจœเจพเจ‚เจš เจฌเฉ‡เจฒเฉ‹เฉœเฉ€ เจนเฉˆ, เจœเจพเจ‚ เจ…เจธเฉ€เจ‚ เจธเฉฐเจญเจพเจตเฉ€ เจคเฉŒเจฐ 'เจคเฉ‡ เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจ‡เฉฑเจ• เจ—เฉฐเจญเฉ€เจฐ เจ—เจฒเจคเฉ€ เจชเฉเจฐเจพเจชเจค เจ•เจฐ เจธเจ•เจฆเฉ‡ เจนเจพเจ‚ - เจ‡เฉฑเจ• เจจเจฒ เจธเฉฐเจฆเจฐเจญ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผเฅค

เจธเจฟเฉฑเจŸเจพ

เจ‡เจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจ‡เฉฑเจ• เจนเฉ‹เจฐ เจ›เฉ‹เจŸเจพ เจ•เจฆเจฎ เจšเฉเฉฑเจ•เจฟเจ† เจนเฉˆ - เจนเฉเจฃ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจเจพ เจนเฉ‹เจฐ เจตเฉ€ เจ†เจธเจพเจจ เจ…เจคเฉ‡ เจธเฉเจตเจฟเจงเจพเจœเจจเจ• เจนเฉ‹ เจ—เจฟเจ† เจนเฉˆเฅค เจฎเฉˆเจ‚ เจ‡เจน เจตเฉ€ เจ•เจนเจฟเจฃเจพ เจšเจพเจนเจพเจ‚เจ—เจพ เจ•เจฟ Chocolatey เจ‡เฉฑเจ• เจตเจงเฉ€เจ† เจชเฉˆเจ•เฉ‡เจœ เจฎเฉˆเจจเฉ‡เจœเจฐ เจนเฉˆ เจœเจฟเจธ เจตเจฟเฉฑเจš เจ•เฉ‹เจก เจตเจฟเฉฑเจš เจฅเฉ‹เฉœเฉเจนเฉ‡ เจœเจฟเจนเฉ‡ เจคเจฐเฉเฉฑเจŸเฉ€เจ†เจ‚ เจนเจจ, เจœเฉ‹ PVS-Studio เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจนเฉ‹เจฐ เจตเฉ€ เจ˜เฉฑเจŸ เจนเฉ‹ เจธเจ•เจฆเฉ€เจ†เจ‚ เจนเจจเฅค

เจธเจพเจจเฉ‚เฉฐ เจธเฉฑเจฆเจพ ัะบะฐั‡ะฐั‚ัŒ เจ…เจคเฉ‡ PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเฉ‹เฅค เจ‡เฉฑเจ• เจธเจฅเจฟเจฐ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจ• เจฆเฉ€ เจจเจฟเจฏเจฎเจค เจตเจฐเจคเฉ‹เจ‚ เจคเฉเจนเจพเจกเฉ€ เจŸเฉ€เจฎ เจฆเฉเจ†เจฐเจพ เจตเจฟเจ•เจธเจค เจ•เฉ€เจคเฉ‡ เจ•เฉ‹เจก เจฆเฉ€ เจ—เฉเจฃเจตเฉฑเจคเจพ เจ…เจคเฉ‡ เจญเจฐเฉ‹เจธเฉ‡เจฏเฉ‹เจ—เจคเจพ เจตเจฟเฉฑเจš เจธเฉเจงเจพเจฐ เจ•เจฐเฉ‡เจ—เฉ€ เจ…เจคเฉ‡ เจ•เจˆเจ†เจ‚ เจจเฉ‚เฉฐ เจฐเฉ‹เจ•เจฃ เจตเจฟเฉฑเจš เจฎเจฆเจฆ เจ•เจฐเฉ‡เจ—เฉ€ เจœเจผเฉ€เจฐเฉ‹ เจฆเจฟเจจ เจฆเฉ€เจ†เจ‚ เจ•เจฎเจœเจผเฉ‹เจฐเฉ€เจ†เจ‚.

PS

เจชเฉเจฐเจ•เจพเจธเจผเจจ เจคเฉ‹เจ‚ เจชเจนเจฟเจฒเจพเจ‚, เจ…เจธเฉ€เจ‚ เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจšเจพเจ•เจฒเฉ‡เจŸ เจกเจฟเจตเฉˆเจฒเจชเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจญเฉ‡เจœเจฟเจ†, เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ เจšเฉฐเจ—เฉ€ เจคเจฐเฉเจนเจพเจ‚ เจชเฉเจฐเจพเจชเจค เจ•เฉ€เจคเจพเฅค เจธเจพเจจเฉ‚เฉฐ เจ•เฉเจ เจตเฉ€ เจจเจพเจœเจผเฉเจ• เจจเจนเฉ€เจ‚ เจฒเฉฑเจ—เจฟเจ†, เจชเจฐ เจ‰เจนเจจเจพเจ‚ เจจเฉ‡, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, "api-key" เจ•เฉเฉฐเจœเฉ€ เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจธเจพเจจเฉ‚เฉฐ เจฒเฉฑเจญเจฟเจ† เจฌเฉฑเจ— เจชเจธเฉฐเจฆ เจ•เฉ€เจคเจพเฅค

PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจนเฉเจฃ เจšเจพเจ•เจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉˆ: Azure DevOps เจฆเฉ‡ เจนเฉ‡เจ เจพเจ‚ เจคเฉ‹เจ‚ เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ

เจœเฉ‡เจ•เจฐ เจคเฉเจธเฉ€เจ‚ เจ‡เจธ เจฒเฉ‡เจ– เจจเฉ‚เฉฐ เจ…เฉฐเจ—เฉเจฐเฉ‡เจœเจผเฉ€ เจฌเฉ‹เจฒเจฃ เจตเจพเจฒเฉ‡ เจฆเจฐเจธเจผเจ•เจพเจ‚ เจจเจพเจฒ เจธเจพเจ‚เจเจพ เจ•เจฐเจจเจพ เจšเจพเจนเฉเฉฐเจฆเฉ‡ เจนเฉ‹, เจคเจพเจ‚ เจ•เจฟเจฐเจชเจพ เจ•เจฐเจ•เฉ‡ เจ…เจจเฉเจตเจพเจฆ เจฒเจฟเฉฐเจ• เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเฉ‹: เจตเจฒเจพเจฆเจฟเจธเจฒเจพเจต เจธเจŸเฉ‹เจฒเจฏเจพเจฐเฉ‹เจตเฅค PVS-เจธเจŸเฉ‚เจกเฉ€เจ“ เจนเฉเจฃ เจšเจพเจ•เจฒเฉ‡เจŸ เจตเจฟเฉฑเจš เจนเฉˆ: Azure DevOps เจฆเฉ‡ เจ…เจงเฉ€เจจ เจšเจพเจ•เจฒเฉ‡เจŸ เจฆเฉ€ เจœเจพเจ‚เจš เจ•เจฐ เจฐเจฟเจนเจพ เจนเฉˆ.

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹