เช
เชฎเซ PVS-เชธเซเชเซเชกเชฟเชฏเซเชจเซ เชเชชเชฏเซเช เชตเชงเซ เช
เชจเซเชเซเชณ เชฌเชจเชพเชตเชตเชพเชจเซเช เชเชพเชฒเซ เชฐเชพเชเซเช เชเซเช. เช
เชฎเชพเชฐเซเช เชตเชฟเชถเซเชฒเซเชทเช เชนเชตเซ เชเซเชเชฒเซเชเซเชฎเชพเช เชเชชเชฒเชฌเซเชง เชเซ, เชเซ Windows เชฎเชพเชเซ เชชเซเชเซเช เชฎเซเชจเซเชเชฐ เชเซ. เช
เชฎเซ เชฎเชพเชจเซเช เชเซเช เชเซ เช PVS-เชธเซเชเซเชกเชฟเชฏเซเชจเซ เชเชฎเชพเชตเชเชจเซ เชธเชฐเชณ เชฌเชจเชพเชตเชถเซ, เชเชพเชธ เชเชฐเซเชจเซ, เชเซเชฒเชพเชเชก เชธเซเชตเชพเชเชฎเชพเช. เชฆเซเชฐ เชจ เชเชตเชพ เชฎเชพเชเซ, เชเชพเชฒเซ เชคเซ เช เชเซเชเชฒเซเชเซเชจเซ เชธเซเชฐเซเชค เชเซเชก เชคเชชเชพเชธเซเช. Azure DevOps CI เชธเชฟเชธเซเชเชฎ เชคเชฐเซเชเซ เชเชพเชฐเซเชฏ เชเชฐเชถเซ.
เช เชนเซเช เชเซเชฒเชพเชเชก เชธเชฟเชธเซเชเชฎเซเชธ เชธเชพเชฅเซ เชเชเซเชเชฐเชฃเชจเชพ เชตเชฟเชทเชฏ เชชเชฐเชจเชพ เช เชฎเชพเชฐเชพ เช เชจเซเชฏ เชฒเซเชเซเชจเซ เชธเซเชเชฟ เชเซ:
PVS-เชธเซเชเซเชกเชฟเชฏเซ เชตเชพเชฆเชณเซเชฎเชพเช เชเชพเชฏ เชเซ: Azure DevOps เชชเซเชตเซเชเชธ-เชธเซเชเซเชกเชฟเชฏเซ เชตเชพเชฆเชณเซเชฎเชพเช เชเชพเชฏ เชเซ: เชเซเชฐเซเชตเชฟเชธ เชธเซเชเช PVS-เชธเซเชเซเชกเชฟเชฏเซ เชตเชพเชฆเชณเซเชฎเชพเช เชเชพเชฏ เชเซ: CircleCI PVS-เชธเซเชเซเชกเชฟเชฏเซ เชตเชพเชฆเชณเซ เชชเชฐ เชเชพเชฏ เชเซ: GitLab CI/CD
เชนเซเช เชคเชฎเชจเซ เชธเชฒเชพเชน เชเชชเซเช เชเซเช เชเซ Azure DevOps เชธเชพเชฅเซ เชเชเซเชเชฐเชฃ เชตเชฟเชถเซเชจเชพ เชชเซเชฐเชฅเชฎ เชฒเซเช เชชเชฐ เชงเซเชฏเชพเชจ เชเชชเซ, เชเชพเชฐเชฃ เชเซ เช เชเชฟเชธเซเชธเชพเชฎเชพเช เชเซเชเชฒเชพเช เชฎเซเชฆเซเชฆเชพเช เช เชตเชเชฃเชตเชพเชฎเชพเช เชเชตเซเชฏเชพ เชเซ เชเซเชฅเซ เชกเซเชชเซเชฒเชฟเชเซเช เชจ เชฅเชพเชฏ.
เชคเซเชฅเซ, เช เชฒเซเชเชจเชพ เชนเซเชฐเซ:
เชเซเชเชฒเซเชเซเชจเชพ เชเชชเชฏเซเช เชตเชฟเชถเซ
เชคเชฎเซ เชเชฎเชพเช เชชเซเชเซเช เชฎเซเชจเซเชเชฐเชจเซ เชเซเชตเซ เชฐเซเชคเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเซเช เชคเซ เชเซเช เชถเชเซ เชเซ
เชตเชฟเชถเซเชฒเซเชทเชเชจเชพ เชจเชตเซเชจเชคเชฎ เชธเชเชธเซเชเชฐเชฃเชจเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเชตเชพเชจเซ เชเชฆเซเชถ:
choco install pvs-studio
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
เชเชเชณ เชเชชเชฃเซ เชตเชฐเซเชเซเชฏเซเช เชฒ เชฎเชถเซเชจ เชชเชธเชเชฆ เชเชฐเชตเชพเชจเซ เชเชฐเซเชฐ เชเซ. เชนเชฎเชฃเชพเช เชฎเชพเชเซ เชคเซ Windows เชธเชฐเซเชตเชฐ 2019 เช เชจเซ เชตเชฟเชเซเชฏเซเช เชฒ เชธเซเชเซเชกเชฟเชฏเซ 2019 เชธเชพเชฅเซ เชฎเชพเชเชเซเชฐเซเชธเซเชซเซเช-เชนเซเชธเซเชเซเชก เชเชเชจเซเช เชนเชถเซ:
pool:
vmImage: 'windows-latest'
เชเชพเชฒเซ เชฐเซเชชเชฐเซเชเชพเชเชเชจ เชซเชพเชเชฒเชจเชพ เชฎเซเชเซเชฏ เชญเชพเชเชฎเชพเช เชเชเชณ เชตเชงเซเช (block เชชเชเชฒเชพเชเช). เชคเชฎเซ เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจเชฎเชพเช เชฎเชจเชธเซเชตเซ เชธเซเชซเซเชเชตเซเชฐ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซ เชถเชเชคเชพ เชจเชฅเซ เชคเซ เชนเชเซเชเชค เชนเซเชตเชพ เชเชคเชพเช, เชฎเซเช เชกเซเชเชฐ เชเชจเซเชเซเชจเชฐ เชเชฎเซเชฐเซเชฏเซเช เชจเชฅเซ. เช
เชฎเซ 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-Studio เชฒเซเชเชฟเชจ เช เชจเซ เชฒเชพเชเชธเชจเซเชธ เชเซ เชธเซเชเซเชฐ เชเชฐเชถเซ. เชคเซเชฎเชจเชพ เชฎเซเชฒเซเชฏเซ เชธเซเช เชเชฐเชตเชพ เชฎเชพเชเซ, เชฎเซเชจเซ เชเซเชฒเซ เชเชฒ->เชจเชตเซเช เชเชฒ. เชเชพเชฒเซ เชเชฒ เชฌเชจเชพเชตเซเช 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.
เชงเซเชฏเชพเชจเชฎเชพเช เชฒเซเชตเชพเชฏเซเชฒเชพ เชเซเชเชกเชพเชฎเชพเช, เช เชเช เชจเชพเชจเซ เชเชพเชฎเซ เชเซ. เชนเชพ, เช เชธเซเชฅเชฟเชคเชฟ & เชเชชเชฐเซเชเชฐเชจเซ && เชเชชเชฐเซเชเชฐ เชธเชพเชฅเซ เชฌเชฆเชฒเซเชจเซ เชเชชเซเชเชฟเชฎเชพเชเช เชเชฐเซ เชถเชเชพเชฏ เชเซ, เชชเชฐเชเชคเซ เชตเซเชฏเชตเชนเชพเชฐเชฟเช เชฆเซเชทเซเชเชฟเชเซเชฃเชฅเซ, เช เชเชเชเชชเชฃ เช
เชธเชฐ เชเชฐเชคเซเช เชจเชฅเซ. เชเซ เชเซ, เช
เชจเซเชฏ เชเชฟเชธเซเชธเชพเชเชฎเชพเช, เชเซเชฏเชพเชฐเซ เช
เชญเชฟเชตเซเชฏเชเซเชคเชฟเชจเซ เชเชฎเชฃเซ เชฌเชพเชเซเชจเซ เชเซเชเชพ/เช
เชฎเชพเชจเซเชฏ เชฎเซเชฒเซเชฏเซ เชธเชพเชฅเซ เชเชฃเชตเชพเชฎเชพเช เชเชตเซ เชคเซเชฏเชพเชฐเซ & เช
เชจเซ && เชตเชเซเชเซเชจเซ เชฎเซเชเชเชตเชฃ เชเชเชญเซเชฐ เชธเชฎเชธเซเชฏเชพเชเชจเซเช เชเชพเชฐเชฃ เชฌเชจเซ เชถเชเซ เชเซ. เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เช
เชฎเชพเชฐเชพ เชญเซเชฒ เชธเชเชเซเชฐเชนเชฎเชพเช,
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);
}
....
}
....
}
เช เชนเซเช เชเช เชตเชฟเชเชฟเชคเซเชฐ เชจเซเชธเซเชเซเชก เชธเซเชฅเชฟเชคเชฟ เชเซ: InstallPackageVersions.Count != 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)
{
....
}
....
}
เชเชคเซเชคเชฎ เชญเซเชฒ: เชชเซเชฐเชฅเชฎ เชตเชธเซเชคเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฒ เชชเซเชเซเช เชเชชเชฏเซเช เชฅเชพเชฏ เชเซ เช เชจเซ เชชเชเซ เชคเชชเชพเชธเชตเชพเชฎเชพเช เชเชตเซ เชเซ เชจเชฒ. เช เชกเชพเชฏเชเซเชจเซเชธเซเชเชฟเช เช เชฎเชจเซ เชชเซเชฐเซเชเซเชฐเชพเชฎเชฎเชพเช เชฌเซเชฎเชพเชเชฅเซ เชเช เชธเชฎเชธเซเชฏเชพ เชตเชฟเชถเซ เชเชฃเชพเชตเซ เชเซ: เชเซเชฏเชพเช เชคเซ เชเชจเซเชธเซเชเซเชฒ เชเชฐเซเชฒ เชชเซเชเซเช เชเซเชฏเชพเชฐเซเชฏ เชธเชฎเชพเชจ เชจเชฅเซ เชจเชฒ, เชเซ เชถเชเชเชพเชธเซเชชเชฆ เชเซ, เช เชจเซ เชชเชเซ เชเซเช เชฐเซเชกเชจเซเชกเชจเซเช เชเซ, เช เชฅเชตเชพ เช เชฎเชจเซ เชธเชเชญเชตเชคเช เชเซเชกเชฎเชพเช เชเชเชญเซเชฐ เชญเซเชฒ เชฎเชณเซ เชถเชเซ เชเซ - เชจเชฒ เชธเชเชฆเชฐเซเชญเชจเซ เชเชเซเชธเซเชธ เชเชฐเชตเชพเชจเซ เชชเซเชฐเชฏเชพเชธ.
เชจเชฟเชทเซเชเชฐเซเชท
เชคเซเชฅเซ เช เชฎเซ เชฌเซเชเซเช เชจเชพเชจเซเช เชชเชเชฒเซเช เชญเชฐเซเชฏเซเช เชเซ - เชนเชตเซ PVS-Studio เชจเซ เชเชชเชฏเซเช เชตเชงเซ เชธเชฐเชณ เช เชจเซ เชตเชงเซ เช เชจเซเชเซเชณ เชฌเชจเซ เชเชฏเซ เชเซ. เชนเซเช เช เชชเชฃ เชเชนเซเชตเชพ เชฎเชพเชเชเซ เชเซเช เชเซ เชเซเชเชฒเซเชเซ เช เชเซเชกเชฎเชพเช เชจเชพเชจเซ เชธเชเชเซเชฏเชพเชฎเชพเช เชญเซเชฒเซ เชธเชพเชฅเซ เชเช เชธเชพเชฐเซ เชชเซเชเซเช เชฎเซเชจเซเชเชฐ เชเซ, เชเซ PVS-เชธเซเชเซเชกเชฟเชฏเซเชจเซ เชเชชเชฏเซเช เชเชฐเชคเซ เชตเชเชคเซ เชชเชฃ เชเชเซ เชนเซเช เชถเชเซ เชเซ.
เช
เชฎเซ เชคเชฎเชจเซ เชเชฎเชเชคเซเชฐเชฃ เชเชชเซเช เชเซเช
PS
เชชเซเชฐเชเชพเชถเชจ เชชเชนเซเชฒเชพเช, เช เชฎเซ เชฒเซเช เชเซเชเชฒเซเชเซ เชตเชฟเชเชพเชธเชเชฐเซเชคเชพเชเชจเซ เชฎเซเชเชฒเซเชฏเซ เชนเชคเซ, เช เชจเซ เชคเซเชเชจเซ เชคเซ เชธเชพเชฐเซ เชฐเซเชคเซ เชฎเชณเซเชฏเซ เชนเชคเซ. เช เชฎเชจเซ เชเชเชเชชเชฃ เชเชเชฟเชฒ เชฒเชพเชเซเชฏเซเช เชจเชฅเซ, เชชเชฐเชเชคเซ เชคเซเชเชจเซ, เชเชฆเชพเชนเชฐเชฃ เชคเชฐเซเชเซ, เช เชฎเชจเซ "api-key" เชเซ เชธเชพเชฅเซ เชธเชเชฌเชเชงเชฟเชค เชฌเช เชเชฎเซเชฏเซเช.
เชเซ เชคเชฎเซ เช เชฒเซเช เช
เชเชเซเชฐเซเชเซ เชฌเซเชฒเชคเชพ เชชเซเชฐเซเชเซเชทเชเซ เชธเชพเชฅเซ เชถเซเชฐ เชเชฐเชตเชพ เชฎเชพเชเชเชคเชพ เชนเซ, เชคเซ เชเซเชชเชพ เชเชฐเซเชจเซ เช
เชจเซเชตเชพเชฆ เชฒเชฟเชเชเชจเซ เชเชชเชฏเซเช เชเชฐเซ: Vladislav Stolyarov.
เชธเซเชฐเซเชธ: www.habr.com