เจ
เจธเฉเจ PVS-เจธเจเฉเจกเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจจเฉเฉฐ เจนเฉเจฐ เจธเฉเจตเจฟเจงเจพเจเจจเจ เจฌเจฃเจพเจเจฃเจพ เจเจพเจฐเฉ เจฐเฉฑเจเจฆเฉ เจนเจพเจเฅค เจธเจพเจกเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจนเฉเจฃ Chocolatey เจตเจฟเฉฑเจ เจเจชเจฒเจฌเจง เจนเฉ, เจตเจฟเฉฐเจกเฉเจเจผ เจฒเจ เจเฉฑเจ เจชเฉเจเฉเจ เจฎเฉเจจเฉเจเจฐเฅค เจธเจพเจกเจพ เจฎเฉฐเจจเจฃเจพ เจนเฉ เจเจฟ เจเจน PVS-เจธเจเฉเจกเฉเจ เจฆเฉ เจคเฉเจจเจพเจคเฉ เจฆเฉ เจธเจนเฉเจฒเจค เจฆเฉเจตเฉเจเจพ, เจเจพเจธ เจคเฉเจฐ 'เจคเฉ, เจเจฒเจพเจเจก เจธเฉเจตเจพเจตเจพเจ เจตเจฟเฉฑเจเฅค เจฆเฉเจฐ เจจเจพ เจเจพเจฃ เจฒเจ, เจเจ เจเจธเฉ เจเจพเจเจฒเฉเจ เจฆเฉ เจธเจฐเฉเจค เจเฉเจก เจฆเฉ เจเจพเจเจ เจเจฐเฉเจเฅค Azure DevOps เจเฉฑเจ CI เจธเจฟเจธเจเจฎ เจตเจเฉเจ เจเฉฐเจฎ เจเจฐเฉเจเจพเฅค
เจเฉฑเจฅเฉ เจเจฒเจพเจเจก เจชเฉเจฐเจฃเจพเจฒเฉเจเจ เจจเจพเจฒ เจเจเฉเจเจฐเจฃ เจฆเฉ เจตเจฟเจธเจผเฉ 'เจคเฉ เจธเจพเจกเฉ เจนเฉเจฐ เจฒเฉเจเจพเจ เจฆเฉ เจธเฉเจเฉ เจนเฉ:
PVS-เจธเจเฉเจกเฉเจ เจฌเฉฑเจฆเจฒเจพเจ 'เจคเฉ เจเจพเจเจฆเจพ เจนเฉ: Azure DevOps เจชเฉเจตเฉเจเจธ-เจธเจเฉเจกเฉเจ เจฌเฉฑเจฆเจฒเจพเจ 'เจคเฉ เจเจพเจเจฆเจพ เจนเฉ: เจเฉเจฐเฉเจตเจฟเจธ เจธเฉเจเจ เจชเฉเจตเฉเจเจธ-เจธเจเฉเจกเฉเจ เจฌเฉฑเจฆเจฒเจพเจ 'เจคเฉ เจเจพเจเจฆเจพ เจนเฉ: เจธเจฐเจเจฒเจธเฉเจเจ PVS-เจธเจเฉเจกเฉเจ เจฌเฉฑเจฆเจฒเจพเจ 'เจคเฉ เจเจพเจเจฆเจพ เจนเฉ: GitLab CI/CD
เจฎเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ Azure DevOps เจจเจพเจฒ เจเจเฉเจเจฐเจฃ เจฌเจพเจฐเฉ เจชเจนเจฟเจฒเฉ เจฒเฉเจ เจตเฉฑเจฒ เจงเจฟเจเจจ เจฆเฉเจฃ เจฆเฉ เจธเจฒเจพเจน เจฆเจฟเฉฐเจฆเจพ เจนเจพเจ, เจเจฟเจเจเจเจฟ เจเจธ เจเฉเจธ เจตเจฟเฉฑเจ เจเฉเจ เจจเฉเจเจคเฉ เจเฉฑเจก เจฆเจฟเฉฑเจคเฉ เจเจ เจนเจจ เจคเจพเจ เจเฉ เจกเฉเจชเจฒเฉเจเฉเจ เจจเจพ เจเฉเจคเจพ เจเจพ เจธเจเฉเฅค
เจเจธ เจฒเจ, เจเจธ เจฒเฉเจ เจฆเฉ เจนเฉเจฐเฉ:
เจเจพเจเจฒเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฌเจพเจฐเฉ
เจคเฉเจธเฉเจ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ เจเจฟ เจเจธ 'เจคเฉ เจชเฉเจเฉเจ เจฎเฉเจจเฉเจเจฐ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจเฉฐเจธเจเจพเจฒ เจเจฐเจจเจพ เจนเฉ
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจฆเฉ เจจเจตเฉเจจเจคเจฎ เจธเฉฐเจธเจเจฐเจฃ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจจ เจฒเจ เจเจฎเจพเจเจก:
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 เจจเฉเฉฐ เจธเจผเจพเจฎเจฒ เจเจฐ เจธเจเจฆเฉ เจนเจพเจเฅค เจ
เจเจฟเจนเจพ เจเจฐเจจ เจฒเจ, เจเจ เจเจฒเฉเจ
เจเฉฑเจฅเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจเจน เจเฉเจฃเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเจฟ เจ เจธเฉเจ เจเจเจธเจเฉเจเจธเจผเจจ เจเจฟเฉฑเจฅเฉ เจเฉเฉเจพเจเจเฉ เจ เจคเฉ เจฌเจเจจ 'เจคเฉ เจเจฒเจฟเฉฑเจ เจเจฐเฉ เจเฉฐเจธเจเจพเจฒ เจเจฐเฉ.
เจธเจซเจฒ เจเฉฐเจธเจเจพเจฒเฉเจธเจผเจจ เจฆเฉ เจฌเจพเจ เจฆ, เจเจฒเจฟเฉฑเจ เจเจฐเฉ เจธเฉฐเจเจ เจจ เจจเฉเฉฐ เจ เฉฑเจเฉ เจตเจงเฉ:
เจคเฉเจธเฉเจ เจนเฉเจฃ เจตเจฟเฉฐเจกเฉ เจตเจฟเฉฑเจ เจเจพเจเจฒเฉเจ เจเจพเจธเจ เจฒเจ เจเฉเจเจชเจฒเฉเจ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ เจเฉฐเจฎ เจเฉฑเจ เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ เจจเฉเฉฐ เจธเฉฐเจชเจพเจฆเจฟเจค เจเจฐเจจ เจตเฉเจฒเฉ azure-pipelines.yml:
เจเจพเจเจฒเฉเจ 'เจคเฉ เจเจฒเจฟเฉฑเจ เจเจฐเฉ เจ เจคเฉ เจเฉเจคเจฐเจพเจ เจฆเฉ เจธเฉเจเฉ เจตเฉเจเฉ:
เจเฉฑเจฅเฉ เจธเจพเจจเฉเฉฐ เจเฉเจฃ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉ เจเฉฐเจธเจเจพเจฒ เจเจฐเฉ เจเฉเจฎเจพเจ เจจเจพเจฒ เจฎเฉเจฆเจพเจจ เจตเจฟเฉฑเจเฅค 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()
เจเจ เจเจฒเจฟเฉฑเจ เจเจฐเฉเจ เจธเฉเจต->เจธเฉเจต->เจเจฒเจพเจ เจเฉฐเจฎ เจจเฉเฉฐ เจเจฒเจพเจเจฃ เจฒเจ. เจเจ เจเจพเจธเจ เจเฉเจฌ 'เจคเฉ เจเจพ เจเฉ เจฐเจฟเจชเฉเจฐเจ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเฉเจเฅค
เจเจพเจเจฒเฉเจ เจชเฉเจฐเฉเจเฉเจเจ เจตเจฟเฉฑเจ C# เจเฉเจก เจฆเฉเจเจ เจธเจฟเจฐเจซเจผ 37615 เจฒเจพเจเจจเจพเจ เจนเจจเฅค เจเจ เจฒเฉฑเจญเฉเจเจ เจเฉเจ เจเจฒเจคเฉเจเจ 'เจคเฉ เจจเจเจผเจฐ เจฎเจพเจฐเฉเจ.
เจเฉเจธเจ เจฆเฉ เจจเจคเฉเจเฉ
เจเฉเจคเจพเจตเจจเฉ N1
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจเฉเจคเจพเจตเจจเฉ:
public abstract class CrytpoHashProviderSpecsBase : TinySpec
{
....
protected CryptoHashProvider Provider;
....
public override void Context()
{
Provider = Provider = new CryptoHashProvider(FileSystem.Object);
}
}
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจจเฉ เจเจชเจฃเฉ เจฒเจ เจตเฉเจฐเฉเจเจฌเจฒ เจฆเฉ เจเฉฑเจ เจ เจธเจพเจเจจเจฎเฉเจเจ เจฆเจพ เจชเจคเจพ เจฒเจเจพเจเจ, เจเจฟเจธเจฆเจพ เจเฉเจ เจฎเจคเจฒเจฌ เจจเจนเฉเจ เจนเฉเฅค เจเจผเจฟเจเจฆเจพเจคเจฐ เจธเฉฐเจญเจพเจตเจจเจพ เจนเฉ, เจเจนเจจเจพเจ เจตเฉเจฐเฉเจเจฌเจฒเจพเจ เจตเจฟเฉฑเจเฉเจ เจเฉฑเจ เจฆเฉ เจฅเจพเจ เจเฉเจ เจนเฉเจฐ เจนเฉเจฃเจพ เจเจพเจนเฉเจฆเจพ เจนเฉเฅค เจเฉเจฐ, เจเจพเจ เจเจน เจเฉฑเจ เจเจพเจเจชเฉ เจนเฉ, เจ เจคเฉ เจตเจพเจงเฉ เจ เจธเจพเจเจจเจฎเฉเจเจ เจจเฉเฉฐ เจฌเจธ เจนเจเจพเจเจ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค
เจเฉเจคเจพเจตเจจเฉ N2
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจเฉเจคเจพเจตเจจเฉ:
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 เจจเฉเฉฐ && เจเจชเจฐเฉเจเจฐ เจจเจพเจฒ เจฌเจฆเจฒ เจเฉ เจเจธ เจธเจฅเจฟเจคเฉ เจจเฉเฉฐ เจ
เจจเฉเจเฉเจฒ เจฌเจฃเจพเจเจ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจชเจฐ เจตเจฟเจนเจพเจฐเจ เจฆเฉเจฐเจฟเจธเจผเจเฉเจเฉเจฃ เจคเฉเจ, เจเจน เจเจฟเจธเฉ เจตเฉ เจเฉเจเจผ เจจเฉเฉฐ เจชเฉเจฐเจญเจพเจตเจฟเจค เจจเจนเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ, เจฆเฉเจเฉ เจฎเจพเจฎเจฒเจฟเจเจ เจตเจฟเฉฑเจ, & เจ
เจคเฉ && เจตเจฟเจเจเจพเจฐ เจเจฒเจเจฃ เจเฉฐเจญเฉเจฐ เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจชเฉเจฆเจพ เจเจฐ เจธเจเจฆเฉ เจนเฉ เจเจฆเฉเจ เจธเจฎเฉเจเจฐเจจ เจฆเฉ เจธเฉฑเจเฉ เจชเจพเจธเฉ เจจเฉเฉฐ เจเจฒเจค/เจ
เจตเฉเจง เจฎเฉเฉฑเจฒเจพเจ เจจเจพเจฒ เจตเจฐเจคเจฟเจ เจเจพเจเจฆเจพ เจนเฉเฅค เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจธเจพเจกเฉ เจเจฒเจคเฉ เจธเฉฐเจเฉเจฐเจนเจฟ เจตเจฟเฉฑเจ,
if ((k < nct) & (s[k] != 0.0))
เจญเจพเจตเฉเจ เจธเฉเจเจเจพเจเจ k เจเจฒเจค เจนเฉ, เจเจธเจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉ เจเจฒเฉเจฎเฉเจเจ เจคเฉฑเจ เจชเจนเฉเฉฐเจ เจเจฐเจจ เจฒเจ เจเฉเจคเฉ เจเจพเจตเฉเจเฉเฅค เจจเจคเฉเจเฉ เจตเจเฉเจ, เจเฉฑเจ เจ เจชเจตเจพเจฆ เจฆเจฟเฉฑเจคเจพ เจเจพเจตเฉเจเจพ IndexOutOfRangeException.
เจเฉเจคเจพเจตเจจเฉเจเจ N3, N4
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจเฉเจคเจพเจตเจจเฉ:
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจเฉเจคเจพเจตเจจเฉ:
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
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจเฉเจคเจพเจตเจจเฉ:
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
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจเฉเจคเจพเจตเจจเฉ:
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
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจเฉเจคเจพเจตเจจเฉ:
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
เจตเจฟเจธเจผเจฒเฉเจธเจผเจ เจเฉเจคเจพเจตเจจเฉ:
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 เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจธเจฎเฉเจ เจนเฉเจฐ เจตเฉ เจเฉฑเจ เจนเฉ เจธเจเจฆเฉเจเจ เจนเจจเฅค
เจธเจพเจจเฉเฉฐ เจธเฉฑเจฆเจพ
PS
เจชเฉเจฐเจเจพเจธเจผเจจ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ, เจ เจธเฉเจ เจฒเฉเจ เจจเฉเฉฐ เจเจพเจเจฒเฉเจ เจกเจฟเจตเฉเจฒเจชเจฐเจพเจ เจจเฉเฉฐ เจญเฉเจเจฟเจ, เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉ เจเจธเจจเฉเฉฐ เจเฉฐเจเฉ เจคเจฐเฉเจนเจพเจ เจชเฉเจฐเจพเจชเจค เจเฉเจคเจพเฅค เจธเจพเจจเฉเฉฐ เจเฉเจ เจตเฉ เจจเจพเจเจผเฉเจ เจจเจนเฉเจ เจฒเฉฑเจเจฟเจ, เจชเจฐ เจเจนเจจเจพเจ เจจเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, "api-key" เจเฉเฉฐเจเฉ เจจเจพเจฒ เจธเจฌเฉฐเจงเจค เจธเจพเจจเฉเฉฐ เจฒเฉฑเจญเจฟเจ เจฌเฉฑเจ เจชเจธเฉฐเจฆ เจเฉเจคเจพเฅค
เจเฉเจเจฐ เจคเฉเจธเฉเจ เจเจธ เจฒเฉเจ เจจเฉเฉฐ เจ
เฉฐเจเฉเจฐเฉเจเจผเฉ เจฌเฉเจฒเจฃ เจตเจพเจฒเฉ เจฆเจฐเจธเจผเจเจพเจ เจจเจพเจฒ เจธเจพเจเจเจพ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเฉ, เจคเจพเจ เจเจฟเจฐเจชเจพ เจเจฐเจเฉ เจ
เจจเฉเจตเจพเจฆ เจฒเจฟเฉฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉ: เจตเจฒเจพเจฆเจฟเจธเจฒเจพเจต เจธเจเฉเจฒเจฏเจพเจฐเฉเจตเฅค
เจธเจฐเฉเจค: www.habr.com