แฉแแแ แแแแ แซแแแแแ 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-แแแ แแแขแแแ แแชแแแก แจแแกแแฎแแ, แ แแแแแ แแ แจแแแแฎแแแแแจแ แแแแแแ แแ แแฃแแฅแขแ แแแแแขแแแแแฃแแแ, แ แแแ แแ แแแฎแแแก แแฃแแแแ แแแ.
แแกแ แ แแ, แแ แกแขแแขแแแก แแแแ แแแ:
แจแแแแแแแแก แแแแแงแแแแแแก แจแแกแแฎแแ
แแฅแแแ แจแแแแซแแแแ แแแฎแแ, แ แแแแ แแแแแแกแขแแแแ แแ แแแแแ แแแแแขแแก แแแแแฏแแ แ
แแ แซแแแแแ แแแแแแแแขแแ แแก แฃแแฎแแแกแ แแแ แกแแแก แแแกแแงแแแแแแแ:
choco install pvs-studio
PVS-Studio แแแแแขแแก แแแแแ แแขแฃแแ แแแ แกแแแก แแแกแขแแแแชแแแก แแ แซแแแแแ:
choco install pvs-studio --version=7.05.35617.2075
แแแแฃแแแกแฎแแแแแ, แแแแแแขแแแแแฃแแแ แแฎแแแแ แแแแแแแแขแแ แแก แแแ แแแ, Core แแแแแแแแแขแ. แงแแแแ แกแฎแแ แแ แแจแ (Standalone, JavaCore, IDEA, MSVS2010, MSVS2012, MSVS2013, MSVS2015, MSVS2017, MSVS2019) แจแแแซแแแแ แแแแแแชแแก --package-แแแ แแแแขแ แแแแก แแแแแงแแแแแแ.
แแ แซแแแแแแก แแแแแแแแ, แ แแแแแแช แแแแแแกแขแแแแ แแแก แแแแแแแแขแแ แก แแแแฃแแ Visual Studio 2019-แแกแแแแก:
choco install pvs-studio --package-parameters="'/MSVS2019'"
แแฎแแ แแแแแ แจแแแฎแแแแ แแแแแแแแขแแ แแก แแแกแแฎแแ แฎแแแแแ แแแแแงแแแแแแก แแแแแแแแก Azure DevOps-แจแ.
แ แแแฃแแแ แแแ
แจแแแแฎแกแแแแแ, แ แแ แแ แแก แชแแแแ แแแแงแแคแแแแแ แแกแแ แกแแแแแฎแแแแ, แ แแแแ แแชแแ แแแแแ แแจแแก แ แแแแกแขแ แแชแแ, Build Pipeline-แแก แจแแฅแแแ แแ แแฅแแแแ แแแแแ แแจแแก แกแแแฅแ แแแแแแชแแ GitHub แกแแชแแแจแ แแแแแแ แ แแ แแแฅแขแแแ.
แแแ แแแ แ แแแจแ, แแแแแ แแแแแงแแแแ แแแจแแแแแก แขแ แแแแ แ, แ แแแแแแช แแแฃแแแแแแก, แ แแ แฉแแแ แแแจแแแแ แแฎแแแแ แชแแแแแแแแแแกแแแแก แกแแแแแแกแขแ แ แคแแแแแแ:
trigger:
- master
แจแแแแแ แฉแแแ แฃแแแ แแแแ แฉแแแ แแแ แขแฃแแแฃแ แ แแแแฅแแแ. แแ แแ แแแกแแแแก แแก แแฅแแแแ Microsoft-แแก แแแกแแแแซแแแ แแแแแขแ Windows Server 2019 แแ Visual Studio 2019:
pool:
vmImage: 'windows-latest'
แแแแแ แแแแแแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแแก แกแฎแแฃแแแ (แแแแแ แแแแแฏแแแ). แแแแกแแ แแแฃแฎแแแแแแ, แ แแ แแฅแแแ แแ แจแแแแซแแแแ แแแแแแกแขแแแแ แแ แแแแแแแแฃแ แ แแ แแแ แแแ แแแ แขแฃแแแฃแ แแแแฅแแแแจแ, แแ แแ แแแแแแแขแ Docker แแแแขแแแแแ แ. แฉแแแ แจแแแแแซแแแ แแแแแแแขแแ Chocolatey, แ แแแแ แช แแแคแแ แแแแแ Azure DevOps-แแกแแแแก. แแแแกแแแแแก แแแแแ แฌแแแแแแ
แแฅ แแฅแแแ แฃแแแ แแแ แฉแแแ แกแแ แแแแแแแขแแแ แแแคแแ แแแแแแก แแ แแแแญแแ แแ แฆแแแแแก แแแกแขแแแแชแแ.
แฌแแ แแแขแแแฃแแ แแแกแขแแแแชแแแก แจแแแแแ แแแแญแแ แแ แแแแแแแ แแ แแแแแแแชแแแจแ:
แแฎแแ แจแแแแซแแแแ แแฎแแแแ แจแแแแแแแแก แแแแแแแแแก แจแแแแแแ แคแแแฏแแ แแจแ แแแแชแแแแแ แแแแคแแแฃแ แแชแแแก แคแแแแแก แ แแแแฅแขแแ แแแแกแแก 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 แคแแแแแก แแแแแงแแแแแแ:
ั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()
แแแแแ แแแแแญแแ แแ แจแแแแฎแแ-> แจแแแแฎแแ-> แแแจแแแแ แแแแแแแแแก แจแแกแแกแ แฃแแแแแแ. แแแแแแแฌแแ แแ แแแแแ แแจแ แแแแชแแแแแแก แฉแแแแ แแแ แแแแแกแแแแ.
Chocolatey แแ แแแฅแขแ แจแแแชแแแก 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_แแ แกแแแแแก.
แแแแฎแแแฃแ แคแ แแแแแแขแจแ แแก แฃแแแแจแแแแแ แฎแแ แแแแแ. แแแแฎ, แแ แแแแแแแ แแแแแก แแแขแแแแแแชแแ แจแแกแแซแแแแแแแ & แแแแ แแขแแ แแก && แแแแ แแขแแ แแ แฉแแแแชแแแแแแ, แแแแ แแ แแ แแฅแขแแแฃแแ แแแแแกแแแ แแกแแ แแก แแ แแคแแ แแ แแ แแแฅแแแแแแก. แแฃแแชแ, แกแฎแแ แจแแแแฎแแแแแแจแ, แแแแแแฃแแแแแ & แแ &&-แก แจแแ แแก แจแแแซแแแแ แแแแแแฌแแแแก แกแแ แแแแฃแแ แแ แแแแแแแแ, แ แแแแกแแช แแแแแฎแแขแแแก แแแ แฏแแแแ แแฎแแ แ แแแแแฎแแแแแ แแ แแกแฌแแ แ/แแ แแกแฌแแ แ แแแแจแแแแแแแแแแ. แแแแแแแแแ, แฉแแแแก แจแแชแแแแแแแก แแแแแฅแชแแแจแ,
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);
}
....
}
....
}
แแฅ แแ แแก แฃแชแแแฃแ แ แฉแแแแแฃแแ แแแแแแแ แแแแ: installedPackageVersions.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 แแแแฎแแแ แแแแแแแ แแแ แจแแซแแแก แแแ แแแแขแ แแก แแแแแงแแแแแ แแแแแ แแแแแ แ แแแแแแแแ แแแ. แแแแแ แแแชแแแฃแแ แแแ แแแแขแ แแแแก แแกแแแแกแแ, แจแแแแซแแแ แจแแแแแแแแแแแ แจแแแแแแ แแแ แแแแขแ แแแ:
commandArguments.contains("-apikey=");
commandArguments.contains("-api-key=");
Copy-paste แจแแชแแแแแแก แแแแ แจแแแกแ แแฅแแก แแแ แ แแฃ แแแแแ แแแแแฉแแแแก แแแแแกแแแแ แแ แแแฅแขแจแ แแแแ แ แแแแแแแแแ แฌแงแแ แแก แแแแแ แแ แแแแแแ แแ แซแแแแก แแ แ-แแ แแ แกแแฃแแแแแกแ แกแแจแฃแแแแแแ แกแขแแขแแแฃแ แ แแแแแแแ.
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-Studio-แก แแแแแงแแแแแ แแแแแ แฃแคแ แ แแแแแแ แแ แแแกแแฎแแ แฎแแแแแ แแแฎแแ. แแ แแกแแแ แแแแแ แแแฅแแ, แ แแ Chocolatey แแ แแก แแแ แแ แแแแแขแแก แแแแแฏแแ แ แแแแจแ แแชแแ แ แ แแแแแแแแแก แจแแชแแแแแ, แ แแช แจแแแซแแแแ แแแแแ แฃแคแ แ แแแแแแแ แแงแแก PVS-Studio-แก แแแแแงแแแแแแกแแก.
แแแแแขแแแแแแ
PS
แแแแแฅแแแงแแแแแแแ แกแขแแขแแ แจแแแแแแแแก แแแแแแแแแ แแแก แแแแฃแแแแแแแ แแ แแแ แแแ แแแ แแแแฆแแก. แฉแแแ แแแ แแคแแ แ แแแแแแแ แแ แแขแแแฃแแ, แแแแ แแ แแแ, แแแแแแแแแ, แแแแฌแแแแ แแก แจแแชแแแแ, แ แแแแแแช แฉแแแ แแฆแแแแแฉแแแแ, แ แแแแแแช แแแแแแจแแ แแแฃแแแ "api-key" แแแแแแจแแแ.
แแฃ แแกแฃแ แ แแแฃแแแแ แแ แแก แกแขแแขแแ แแแแแแกแฃแ แแแแแแ แแฃแแแขแแ แแแก, แแแฎแแแ, แแแแแแงแแแแ แแแ แแแแแแก แแแฃแแ: แแแแแแกแแแ แกแขแแแแแ แแแ.
แฌแงแแ แ: www.habr.com