เบเบงเบเปเบฎเบปเบฒเบชเบทเบเบเปเปเปเบฎเบฑเบเปเบซเปเบเบฒเบเบเปเบฒเปเบเป PVS-Studio เบชเบฐเบเบงเบเบเบงเปเบฒ. เบเบฝเบงเบเบตเปเปเบเบทเปเบญเบเบงเบดเปเบเบฒเบฐเบเบญเบเบเบงเบเปเบฎเบปเบฒเบกเบตเปเบซเปเบขเบนเปเปเบ Chocolatey, เบเบนเปเบเบฑเบเบเบฒเบเบเบธเบเบเบญเบ Windows. เบเบงเบเปเบฎเบปเบฒเปเบเบทเปเบญเบงเปเบฒเบเบตเปเบเบฐเบชเปเบฒเบเบเบงเบฒเบกเบชเบฐเบเบงเบเปเบเบเบฒเบเบเบณเปเบเป PVS-Studio, เปเบเบเบชเบฐเปเบเบฒเบฐ, เปเบเบเบฒเบเบเปเบฅเบดเบเบฒเบเบเบฅเบฒเบง. เปเบเบทเปเบญเบเปเปเปเบซเปเปเบเปเบ, เปเบซเปเบเบงเบเปเบเบดเปเบเบฅเบฐเบซเบฑเบเปเบซเบผเปเบเบเบญเบ Chocolatey เบเบฝเบงเบเบฑเบ. Azure DevOps เบเบฐเปเบฎเบฑเบเบซเบเปเบฒเบเบตเปเปเบเบฑเบเบฅเบฐเบเบปเบ CI.
เบเบตเปเปเบกเปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเบเบปเบเบเบงเบฒเบกเบญเบทเปเบเปเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเปเบฝเบงเบเบฑเบเบซเบปเบงเบเปเปเบเบญเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบเบฑเบเบฅเบฐเบเบปเบเบเบฑเบ:
PVS-Studio เปเบเบชเบนเปเบเบฅเบฒเบง: Azure DevOps PVS-Studio เปเบเบชเบนเปเบเบฅเบฒเบง: Travis CI PVS-Studio เปเบเบซเบฒเบเบฅเบฒเบง: CircleCI PVS-Studio เปเบเบซเบฒเบเบฅเบฒเบง: GitLab CI/CD
เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเบฐเบเปเบฒเปเบซเปเบเปเบฒเบเปเบญเบปเบฒเปเบเปเบชเปเบเบฑเบเบเบปเบเบเบงเบฒเบกเบเปเบฒเบญเบดเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเบทเปเบญเบกเปเบเบเบเบฑเบ Azure DevOps, เปเบเบฒเบฐเบงเปเบฒเปเบเบเปเบฅเบฐเบเบตเบเบตเปเบเบฒเบเบเบธเบเบเบทเบเบฅเบฐเปเบงเบฑเปเบเปเบเบทเปเบญเบเปเปเปเบซเปเบเปเปเบฒเบเบฑเบ.
เบเบฑเปเบเบเบฑเปเบ, เบงเบดเบฅเบฐเบเบปเบเบเบญเบเบเบปเบเบเบงเบฒเบกเบเบตเป:
เบเปเบฝเบงเบเบฑเบเบเบฒเบเปเบเป Chocolatey
เบเปเบฒเบโเบชเบฒโเบกเบฒเบโเปเบเบดเปเบโเบงเบดโเบเบตโเบเบฒเบโเบเบดเบโเบเบฑเปเบโเบเบปเบงโเบเบฑเบโเบเบฒเบโเบเบธเบโเบเบปเบงโเบเบญเบโเบกเบฑเบโเปเบญเบโเบขเบนเปโเบเบตเปโเบเบตเปโ
เบเบณเบชเบฑเปเบเบเบดเบเบเบฑเปเบเปเบเบทเปเบญเบเบงเบดเปเบเบฒเบฐเบฅเบธเปเบเบซเบผเปเบฒเบชเบธเบ:
choco install pvs-studio
เบเปเบฒเบชเบฑเปเบเบเบฒเบเบเบดเบเบเบฑเปเบเบชเบฐเบเบฑเบเบชเบฐเปเบเบฒเบฐเบเบญเบเบเบธเบ PVS-Studio:
choco install pvs-studio --version=7.05.35617.2075
เปเบเบเบเปเบฒเปเบฅเบตเปเบกเบเบปเปเบ, เบกเบตเบเบฝเบเปเบเปเปเบเบเบเบญเบเบเบฒเบเบงเบดเปเบเบฒเบฐ, เบญเบปเบเบเบฐเบเบญเบเบซเบผเบฑเบ, เปเบเปเบเบทเบเบเบดเบเบเบฑเปเบ. เบเบธเบเบญเบทเปเบเปเบเบฑเบเปเบปเบ ( Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) เบชเบฒเบกเบฒเบเบเปเบฒเบเปเบเปเปเบเบเปเบเป --package-parameters.
เบเบปเบงเบขเปเบฒเบเบเบญเบเบเปเบฒเบชเบฑเปเบเบเบตเปเบเบฐเบเบดเบเบเบฑเปเบเปเบเบทเปเบญเบเบงเบดเปเบเบฒเบฐเบเบตเปเบกเบต plugin เบชเปเบฒเบฅเบฑเบ Visual Studio 2019:
choco install pvs-studio --package-parameters="'/MSVS2019'"
เบเบญเบเบเบตเปเปเบซเปเปเบเบดเปเบเบเบปเบงเบขเปเบฒเบเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบเบตเปเบชเบฐเบเบงเบเบเบญเบเปเบเบทเปเบญเบเบงเบดเปเบเบฒเบฐเบเบฒเบเปเบเป Azure DevOps.
เบเบฒเบเบเบฑเบ
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเบเบทเบญเบเบเปเบฒเบเบงเปเบฒเบกเบตเบเบฒเบเปเบเบเบเปเบฒเบเบซเบฒเบเบเปเบฝเบงเบเบฑเบเบเบฑเบเบซเบฒเปเบเบฑเปเบเบเบฒเบเบฅเบปเบเบเบฐเบเบฝเบเบเบฑเบเบเบต, เบเบฒเบเบชเปเบฒเบ Pipeline เปเบฅเบฐ synchronizing เบเบฑเบเบเบตเบเบญเบเบเปเบฒเบเบเบฑเบเปเบเบเบเบฒเบเบเบตเปเบเบฑเปเบเบขเบนเปเปเบเบเปเบญเบเปเบเบฑเบเบกเปเบฝเบ GitHub.
เบเปเบญเบเบญเบทเปเบ, เปเบซเปเบเบฑเปเบเบเปเบฒเบเบปเบงเบเบฐเบเบธเปเบเบเบฒเบเปเบเบตเบเบเบปเบง, เบชเบฐเปเบเบเปเบซเปเปเบซเบฑเบเบงเปเบฒเบเบงเบเปเบฎเบปเบฒเปเบเบตเบเบเบปเบงเบเบฝเบเปเบเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเปเบฝเบเปเบเบเปเบ เบเบปเปเบเบชเบฐเบเบฑเบ เบชเบฒเบเบฒ:
trigger:
- master
เบเปเปเปเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฅเบทเบญเบเปเบเบทเปเบญเบ virtual. เบชเปเบฒเบฅเบฑเบเบเบญเบเบเบตเปเบกเบฑเบเบเบฐเปเบเบฑเบเบเบปเบงเปเบเบ Microsoft-hosted เบเบฑเบ Windows Server 2019 เปเบฅเบฐ Visual Studio 2019:
pool:
vmImage: 'windows-latest'
เปเบซเปเบเปเบฒเบเปเบเบซเบฒเปเบเบทเปเบญเปเบเบเบญเบเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒ (block เบเบฑเปเบเบเบญเบ). เปเบเบดเบเบงเปเบฒเบเบฐเบกเบตเบเบงเบฒเบกเบเบดเบเบเบตเปเบงเปเบฒเบเปเบฒเบเบเปเปเบชเบฒเบกเบฒเบเบเบดเบเบเบฑเปเบเบเบญเบเปเบงเบเบตเปเบเบปเบเปเบญเบเบกเบฑเบเปเบเบปเปเบฒเปเบเปเบเปเบเบทเปเบญเบ virtual, เบเปเบญเบเบเปเปเปเบเปเปเบเบตเปเบก Docker container. เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบเบตเปเบก Chocolatey เปเบเบฑเบเบชเปเบงเบเบเบฐเบซเบเบฒเบเบชเปเบฒเบฅเบฑเบ Azure DevOps. เปเบเบทเปเบญเปเบฎเบฑเบเบชเบดเปเบเบเบตเป, เปเบซเปเปเบ
เบเบตเปเบเบตเปเบเปเบฒเบเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฅเบทเบญเบเบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบฐเปเบเบตเปเบกเบเบฒเบเบเบฐเบซเบเบฒเบเปเบฅเบฐเบเบฅเบดเบเปเบชเปเบเบธเปเบก เบเบดเบเบเบฑเปเบ.
เบซเบผเบฑเบเบเบฒเบเบเบฒเบเบเบดเบเบเบฑเปเบเบชเบปเบเบเบปเบเบชเปเบฒเปเบฅเบฑเบ, เปเบซเปเบเบฅเบดเบเปเบชเป เบเปเบฒเปเบเบตเบเบเบฒเบเบเบฑเบเบญเบปเบเบเบฒเบเบเบฑเบเบเบฑเปเบ:
เบเบญเบเบเบตเปเบเปเบฒเบเบชเบฒเบกเบฒเบเปเบเบดเปเบเปเบกเปเปเบเบเบชเปเบฒเบฅเบฑเบเบงเบฝเบเบเบฒเบ Chocolatey เบขเบนเปเปเบเบเปเบญเบเบขเปเบฝเบก เบงเบฝเบเบเบฒเบ เปเบกเบทเปเบญเปเบเปเปเบเปเบเบฅเปเบเบฒเบเบเบฑเปเบเบเปเบฒ azure-pipelines.yml:
เปเบซเปเบเบฅเบดเบเปเบชเป Chocolatey เปเบฅเบฐเปเบเบดเปเบเบเบฑเบเบเบตเบฅเบฒเบเบเบทเปเบเบญเบเบเปเบญเบเบเปเปเบกเบนเบ:
เบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบฅเบทเบญเบ เบเบฒเบเบเบดเบเบเบฑเปเบ เบขเบนเปเปเบเบชเบฐเบซเบเบฒเบกเบเบฑเบเบเบตเบกเบเบฒเบ. 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)
เปเบซเปเบชเปเบฒเบเปเบเบเบเบฒเบเปเบเบเปเบเปเปเบเบฅเป bat เบเบตเปเบเบฑเปเบเบขเบนเปเปเบ repository:
ัall build.bat
เบกเบฒเบชเปเบฒเบเปเบเบเปเบเบตเบเบตเปเปเบเบฅเปเบเบตเปเบกเบตเบเบปเบเบเบญเบเบเบฒเบเบงเบดเปเบเบฒเบฐเบเบฐเบเบทเบเปเบเบฑเบเปเบงเป:
ัall mkdir PVSTestResults
เปเบซเปเปเบฅเบตเปเบกเบเบปเปเบเบเบฒเบเบงเบดเปเบเบฒเบฐเปเบเบเบเบฒเบ:
ัall "C:Program Files (x86)PVS-StudioPVS-Studio_Cmd.exe"
โt .srcchocolatey.sln โo .PVSTestResultsChoco.plog
เบเบงเบเปเบฎเบปเบฒเบเปเบฝเบเบเบปเบเบฅเบฒเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเปเบเบฑเบเบฎเบนเบเปเบเบ html เปเบเบเปเบเปเบเบฐเปเบซเบเบ Plogะกonverter:
ั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()
เปเบซเปเบเบฅเบดเบ Save->Save->Run เปเบเบทเปเบญเบเปเบฒเปเบเบตเบเบเบฒเบเบงเบฝเบเบเบฒเบ. เปเบซเปเบเบฒเบงเปเบซเบผเบเบเบปเบเบฅเบฒเบเบเบฒเบเปเบเบเบเบฒเบเปเบเบเบตเปเปเบเบเปเปเบฒเบงเบฝเบ.
เปเบเบเบเบฒเบ Chocolatey เบกเบตเบเบฝเบ 37615 เปเบชเบฑเปเบเบเบญเบเบฅเบฐเบซเบฑเบ C#. เบเปเปเบซเปเปเบเบดเปเบเบเบฒเบเบเปเปเบเบดเบเบเบฒเบเบเบตเปเบเบปเบ.
เบเบปเบเบเบฒเบเบเบปเบเบชเบญเบ
เบเบณเปเบเบทเบญเบ 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_เบกเบตเบขเบนเป.
เปเบเบเบดเปเบเบชเปเบงเบเบเบตเปเบเบดเบเบฒเบฅเบฐเบเบฒ, เบเบตเปเปเบกเปเบเบเปเปเบเบปเบเบเปเบญเบเปเบฅเบฑเบเบเปเบญเบ. เปเบกเปเบเปเบฅเปเบง, เปเบเบทเปเบญเบเปเบเบเบตเปเบชเบฒเบกเบฒเบเบเบทเบเบเบฑเบเบเบธเบเปเบซเปเบเบตเบเบตเปเบชเบธเบเปเบเบเบเบฒเบเบเปเบฝเบเบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบฑเบ && เบเบฐเบเบดเบเบฑเบเบเบฒเบ, เปเบเปเบเบฒเบเบเบฑเบเบชเบฐเบเบฐเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เบชเบดเปเบเบเบตเปเบเปเปเบกเบตเบเบปเบเบเบฐเบเบปเบเบซเบเบฑเบเปเบฅเบตเบ. เบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เปเบเบเปเบฅเบฐเบเบตเบญเบทเปเบเป, เบเบงเบฒเบกเบชเบฑเบเบชเบปเบเบฅเบฐเบซเบงเปเบฒเบ & & & เบชเบฒเบกเบฒเบเปเบฎเบฑเบเปเบซเปเปเบเบตเบเบเบฑเบเบซเบฒเบฎเปเบฒเบเปเบฎเบเปเบกเบทเปเบญเบเปเบฒเบเบเบงเบฒเบเบญเบเบเบฒเบเบชเบฐเปเบเบเบเบปเบเบเบทเบเบเบฐเบเบดเบเบฑเบเบเปเบงเบเบเปเบฒเบเบตเปเบเปเปเบเบทเบเบเปเบญเบ / เบเปเปเบเบทเบเบเปเบญเบ. เบเบปเบงเบขเปเบฒเบ, เปเบเบเบฒเบเบฅเบงเบเบฅเบงเบกเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบญเบเบเบงเบเปเบฎเบปเบฒ,
if ((k < nct) & (s[k] != 0.0))
เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบฑเบเบเบฐเบเบต k เบเปเปเบเบทเบเบเปเบญเบ, เบกเบฑเบเบเบฐเบเบทเบเบเปเบฒเปเบเปเปเบเบทเปเบญเปเบเบปเปเบฒเปเบเบดเบเบญเบปเบเบเบฐเบเบญเบ array. เบเบฑเปเบเบเบฑเปเบ, เบเปเปเบเบปเบเปเบงเบฑเปเบเบเบฐเบเบทเบเบเบดเปเบก 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
....
}
....
}
เปเบโเบเปโเบฅเบฐโเบเบตโเบเบตเปโ, เบกเบตโเปเบซเบโเบเบปเบ strange เบขเบนเปโเปเบเบทเปเบญเบโเบซเบฅเบฑเบโเบเบฒเบโเบเปเบฒโเปเบเบตเบโเบเบฒเบโเบเบญเบโเบเบนเปโเบเบฐโเบเบดโเบเบฑเบโเบเบฒเบ ternaryโ. เบฅเบญเบเบเบดเบเบฒเบฅเบฐเบเบฒเปเบเบดเปเบ: เบเปเบฒเปเบเบทเปเบญเบเปเบเบเบตเปเบเปเบญเบเบซเบกเบฒเบเบเปเบงเบเปเบฅเบ 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 เบชเบญเบเบชเบฒเบกเปเบเบงเบเปเบฒเบเปเบเบดเบเปเบกเปเบเปเบฅเบตเปเบกเบเบปเปเบเปเบเบฑเบเบชเบนเบ, เบเบปเบงเบเบฐเบเบดเบเบฑเบเบเบฒเบ ternary เบเบฐเบชเบปเปเบเบเบทเบเบเปเบฒ เบเบตเปเบเปเปเบเบทเบเบเปเบญเบ. เปเบเบทเปเบญเบเบเบฒเบเปเบเบทเปเบญเบเปเบเบเบตเป, เบฎเปเบฒเบเบเบฒเบเบเบญเบ loop เบเบฐเบเบทเบเบเบฐเบเบดเบเบฑเบเบเบฝเบเปเบเปเบเบฑเปเบเบเบฝเบง. เบกเบฑเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเปเบญเบเบงเปเบฒเบฅเบฐเบซเบฑเบเบเบตเปเบเปเปเปเบเปเปเบฎเบฑเบเบงเบฝเบเบขเบนเปเปเบเบเบธเบเบชเบดเปเบเบเบตเปเบเบฑเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบฑเปเบเปเบ.
เบเบณเปเบเบทเบญเบ 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");
}
เบเบนเปเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบตเปเบเบฝเบเบฅเบฐเบซเบฑเบเบเบฒเบเบเบตเปเบเบฑเบเบฅเบญเบเปเบฅเบฐเบงเบฒเบเบชเบญเบเปเบเบงเบชเบธเบเบเปเบฒเบเปเบฅเบฐเบฅเบทเบกเบเบตเปเบเบฐเปเบเปเปเบเบกเบฑเบ. เบเปเบงเบเปเบซเบเบเบตเป, เบเบนเปเปเบเป Chocolatey เบเปเปเบชเบฒเบกเบฒเบเบเบณเปเบเปเบเบฒเบฅเบฒเบกเบดเปเบเบตเปเบเป 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, เปเบเบดเปเบเบกเบตเบเบงเบฒเบกเบชเบปเบเปเบช, เปเบฅเบฐเบซเบผเบฑเบเบเบฒเบเบเบฑเปเบเบเบฒเบเบเบงเบเบชเบญเบเปเบกเปเบเบเปเปเบฒเบเปเบญเบ, เบซเบผเบทเบเบงเบเปเบฎเบปเบฒเบญเบฒเบเบเบฐเปเบเปเบฎเบฑเบเบเบงเบฒเบกเบเบดเบเบเบฒเบเบเบตเปเบฎเปเบฒเบเปเบฎเบเปเบเบฅเบฐเบซเบฑเบ - เบเบงเบฒเบกเบเบฐเบเบฒเบเบฒเบกเปเบเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบเบฒเบเบญเปเบฒเบเบญเบดเบ null .
เบชเบฐเบซเบฅเบธเบ
เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบเบฐเบเบดเบเบฑเบเบเบฑเปเบเบเบญเบเบเบฐเบซเบเบฒเบเบเปเบญเบเบญเบตเบ - เปเบเบเบฑเบเบเบธเบเบฑเบเบเบฒเบเบเปเบฒเปเบเป PVS-Studio เปเบเปเบเบฒเบเปเบเบฑเบเบเปเบฒเบเปเบฅเบฐเบชเบฐเบเบงเบเบเบงเปเบฒ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฑเบเบขเบฒเบเปเบงเบปเปเบฒเบงเปเบฒ Chocolatey เปเบเบฑเบเบเบนเปเบเบฑเบเบเบฒเบเบเบธเบเบเบตเปเบเบตเบเบตเปเบกเบตเบเปเบฒเบเบงเบเบเปเปเบเบดเบเบเบฒเบเปเบฅเบฑเบเบเปเบญเบเปเบเบฅเบฐเบซเบฑเบ, เปเบเบดเปเบเบญเบฒเบเบเบฐเบซเบเปเบญเบเบฅเบปเบเปเบกเบทเปเบญเปเบเป PVS-Studio.
เบเบงเบเปเบฎเบปเบฒเปเบเบตเบเบเปเบฒเบ
PS
เบเปเบญเบเบเบตเปเบเบฐเบเบดเบกเปเบเบตเบเปเบเป, เบเบงเบเปเบฎเบปเบฒเปเบเปเบชเบปเปเบเบเบปเบเบเบงเบฒเบกเปเบซเปเบเบฑเบเบเบฑเบเบเบฐเบเบฒ Chocolatey, เปเบฅเบฐเบเบงเบเปเบเบปเบฒเปเบเปเบฎเบฑเบเบกเบฑเบเบเบต. เบเบงเบเปเบฎเบปเบฒเบเปเปเบเบปเบเบชเบดเปเบเบเบตเปเบชเปเบฒเบเบฑเบ, เปเบเปเบเบปเบงเบขเปเบฒเบเปเบเบฑเปเบเบเบงเบเปเบเบปเบฒเบกเบฑเบเบเปเปเบเบปเบเบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบปเบเปเบซเบฑเบเบเบตเปเบเปเบฝเบงเบเปเบญเบเบเบฑเบเบเบธเปเบก "api-key".
เบเปเบฒเบเปเบฒเบเบเปเบญเบเบเบฒเบเปเบเปเบเบเบฑเบเบเบปเบเบเบงเบฒเบกเบเบตเปเบเบฑเบเบเบนเปเบเบปเบกเบเบตเปเปเบงเบปเปเบฒเบเบฒเบชเบฒเบญเบฑเบเบเบดเบ, เบเบฐเบฅเบธเบเบฒเปเบเปเบเบฒเบเปเบเบทเปเบญเบกเบเปเปเบเบฒเบเปเบเบเบฒเบชเบฒ: Vladislav Stolyarov.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com