
GitLabแ แญแแณแ แฅแ แตแ
แฐแถแฝแ แญแ แแ? แจแแแญ แฎแตแแ แฅแซแต แแปแปแ แญแแแแ? แจแแซ แแฐ แตแญแญแแแ แฆแณ แแฅแฐแแ. แจแแ
แฐแต แฅแซแแแฝแ แแแแฐแฝ แแฌ แจPVS-Studio C# analyzerแ แฅแแดแต แฅแแฐแแซแแ
แฉ แฅแแแแญแแณแแแข แแแแ แฅแแณแ แฐแต แ แแแต แฅแ แฐแตแฐแ แแฃแฅแข
โ แ Cแฃ C++แฃ C# แฅแ Java แจแฐแปแ แจแแฎแแซแแฝ แแแญ แฎแต แแตแฅ แตแ
แฐแถแฝแ แฅแ แแแ แจแแฝแ แฐแแแญแแถแฝแ แแแแจแต แจแแซแตแฝแ แแณแชแซ แแแข แ 64-แขแต แตแญแแถแฝ แแญ แญแฐแซแแข Windows, Linux ะธ macOS32-แขแตแฃ 64-แขแต แฅแ แจแฐแซแฐแฑ แจARM แแตแจแฎแฝแ แแแ แซแฐแจแ แฎแต แแฐแแฐแ แญแฝแแแข
แ แแแซแฝแ แแญ แฅแ แแแญ แจแฐแซแแ แตแ PVS-Studio 7.08 แ แแฅแฐแแแข . แแแณแ:
- แจC# แฐแแณแ แตแญ Linux ะธ macOS;
- แฐแฐแช แ Rider;
- แ แฒแต แจแแญแ แแญแแญ แผแญ แแแณ.
แจแแญแ แแญแแญ แ แจแแแฅ แแแณ
แจแแ แ แแต แจแฐแแฐแ แแญแแฝแ แแแแฐแฝ แจ .xml แแญแ แจแแญแแฝ แแญแแญ แแญ แแฐ แฐแแณแ แแตแฐแแแ แ แตแแแ แแ แญแข แแแญ แแ แญแ แ แฃแ แแน แตแแแแ, แ แญแแตแ แ แฅแ แ แจแแซแแแ txt แ แจแแตแฐแแแ แฝแแณแ แจแแจแแ.
แจแฐแแฐแ แแญแแฝแ แแแแฐแฝ แฃแแฒแซแแ แแฅแแต แ แแฅแแต --แแแญ แแญแแฝ (-f) แฅแ txt แ แแญแแฝ แแญแแญ แญแแแข แญแ แ แญแแตแแแข
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.jsonแผแฎแฝแ แแแแแญ แแญแ แฅแซแแแฝแ แแแณแฅ แแแแต แซแแ แญแ แ แแแณ แ แแ แแแ แแตแจแ แตแฝแแแ แข แแฉแแฑ แแแฐแแฐแ แจแแญแแฝแ แแญแแญ แ แแแแต แแญ แญแแแ แฅแ แ แจแตแแ แตแญแแถแฝ แแญ แฅแแฐแแ แแ แญแแฐแแ.
แจแแ แฐแต แฅแซแ แแจแแแซ แแญแ
แจแผแฉ แแ แญแแต แ แฐแแณแ แจแฐแแแต แฝแแฎแฝ แแฐ แแ แฐแต แแตแฅ แฅแแณแญแแก แแจแแแฅ แแ แฃแแคแต แ แญแแซแ. แฅแแฒแแแฃ แ แ แแแญ แแฎแแญแฑแ แ แฅแซแแณแแฑ แแ แแฐแแฐแ แ แแแแแแข แจแแ แ แ แแญ แ แญแแซแแฝแ แ แแแแต, แจแฐแแจแฉ แแญแแฝ แแญแแญ แ แแ. แตแแแ แจแแ แฐแต แฅแซแ แผแญ แแแจแแญ แแณแฅ แ แแญแฃแแแข
แจแแญแแแณแแต แฐแแณแ แจแแ แจแก แ แแต แจแแ แฐแต แฅแซแแ แญแ แ แญแแตแแแข

แ แ
แญแแซแ แแตแฅ แจแแ แฉแต แแแ แตแ
แฐแถแฝ แแแต แแ แแแฆแฝ, แแฐ แแแ แ
แญแแซแ แญแธแแแซแ. แญแ
แแ แตแแแแแแ, แตแแณแแแ แฅแแจแแซแแ, แฅแ แ แแ แแจแณแ แญแ
แ แญแแตแแ.

แฅแแแจแแซแแแข แแแฆแฝ2 แฅแ, แแแ แตแ
แฐแถแฝ แจแแ, แจแแ
แฐแต แฅแซแแ แฅแแแ แแแ, แ แแ แแแซ แแ แแตแ
แฅแแฐแญแแแ.
แ แแแซแฝแ แแญ แแญแ แแแตแ แแแฐแแฐแ แฅแ แจC/C++ แฅแซแแแฝแ แแแณแฅ แแแแต แซแแต แตแแฑ แแแ แฅ แญแฝแแแข .
GitLab
แญแแต แแแญ แจแดแญแฆแแต แจแ แญแแต แกแฐแต แตแญ แแณแชแซ แแแต แจแซแฑ แแช แฃ แจแณแแซ แแจแณแฐแซ แฒแตแฐแ แฃ CI/CD แงแแง แแตแแญ แฅแ แแแฝ แฃแ แชแซแต แซแแ แจแฎแต แแจแแป แ แตแฐแณแฐแญ แตแญแแตแ แจแแซแแญแฅ แแแข
แจแแ แฐแต แฅแซแแแฝแ แตแแฐแ แตแแ แซ แจแแแ แแ แ แแต แแฎแแญแตแแ แแแแแฅ แฅแ แแตแแ แซแตแแแแแณแแข แญแ แ แฅแแดแต แแตแจแ แฅแแณแแฅแ แซแแแ, แฅแ แฅแ แแแแ แจแฅแซ แฃแแฐแจแฃแฌ แข
แ แแแจแฐ. แจแแ แ แณแฝ แจแฐแแแธแแ แ แซแฃแข แจแแแแแต แแแแต แจแแปแแต แแตแฅ แ แแฑ แแ. แแก แแแฐแแฐแ แ แตแแแ แจแแแแ แ แซแฃแข แแแแแแต แฅแ แฐแแณแแ แแแแแญ แฐแจแแแฝแ แแณแจแต แแ. แแแแฃแต แ แฅแญแตแ แแณแญ แแญ แจแ แซแฃแข แแแ แต แฐแจแแแฝแ แแแจแต (แแจแแปแแฝแ แแจแแญ แฃ แฐแแณแแ แแซแ) แฅแ แตแแฐแ-แแแณแ แฃ แจแถแจแญ แแตแแฝแ แจแ แตแแแแ แ แจแฃแข แแญ แ แแแแแต แฅแ แฅแแฑแ แ แแ แแ แฃ แแญแ แ แแ แแแแต แแแจแต แจแ แแ แฅแฉ แญแแแ แข
แ แแ แแ แฅแแฐแแแ แจแ แแ แแแจแณแตแฃ แจแแจแฐแแแ แตแฅแ แฅแแฒแแแจแฑ แแณแฅ แ แแญแฃแแแข

แฐแแณแ .NET Core SDK 3 แซแตแแแแแแฃ แตแแแ
แฐแแณแแ แจแแซแแ แ แแต แจแตแแณแแ แฅแแแแต แจแแซแแฃแธแแ แจแแญแญแฎแถแแต แแจแแปแแฝแ แแจแ แซแตแแแแแณแแข แแฐแแซแฉ แตแญแญแถแฝ แจแแญแญแฎแถแแต แแจแแปแแฝแ แแจแ Linux .
PVS-Studioแ แ แฅแ แ แ แแแฃแช แ แฉแ แแแซแ แจPVS-Studio แแจแแปแแฝแ แแจแ แซแตแแแแแณแแข แแฐแแซแฉ แตแญแญแถแฝ แแจแแปแแฝแ แแจแแญ แ แแตแฅ แ แ แแ แแญแแญ แฐแแแฟแ .
แฐแแณแ แแแตแซแต แจแแแต แแแ แซแตแแแแแแข แ แแญ แจแแจแซ แแแต แแแแต แญแฝแแแข .
แ แแแจแฐ. แฅแฃแญแ แจแฐแแแธแ แจแ แ แซแญ แแด (แจแแ แฐแต แฅแซแแแฝ แตแแฐแ) แจแขแแฐแญแแซแญแ แแแต แฅแแฐแแซแตแแแแ แแฅ แญแ แแข แตแแแ , แญแ แแ แจแ แฐแซแญ แแด แแแแจแญ แจแแแ, แ "แแแฅแญแต" แแตแญ แแตแฅ, แจแตแญแ แต แแแต แฅแแฐแแซแตแแแแ แแแแจแตแแ แ แญแญแฑ.
แจแแ แฐแต แฅแซแ แจแฐแแณ, แจแฐแแจแฉแตแ แแญแแฝ แแญแแญ แฅแป แแฐแแฐแ แ แแฅแ, แ แแ แแแซ แแแแ แแญแแฝ แฅแแแจแแซแแ. แจแแฐแแฐแ แ แแ, แแแแฆแนแ แแฐแแแแแแ แ แญแธแต แแแแฅ แซแตแแแแแ.
แ แแ, แ แแญแแปแฝแ แแต แจแตแซ แตแแฐ-แแแญ แตแแแ, แตแญแชแแฑแ แแฐ แแแ แแแ แ แฅแแฝแแแ. แญแ แแ แแแตแจแ แแญแแ แแแจแญ แซแตแแแแแณแ .gitlab-ci.yml แแญแ แจแแ, แญแแ แฉ. แฅแฑแ แแแแ แญ แจแแฎแแญแตแแ แตแ -> แแญ แ แ แแตแจแ แซแตแแแแแณแ CI/แฒแฒ แซแแ แฉ.

แ แแ แตแญแชแแฑแ แแแปแ แแแ แแ. แแแแชแซ แฐแแณแแ แจแแญแ แฎแต แฅแแฝแ แฅแ แแแฑแ แฅแแตแแฃแก-
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
- wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
- apt-get update
- apt-get -y install pvs-studio-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.slnแแซแ แฅแ แแแ แญ แจแแแ แตแญแชแแถแฝ แ แแต แแจแฐแต แตแแแ แต แแฉ แแแซ แฅแแ แแแแแข แ แแต_แตแญแชแแต. แญแ แ แญแแ แ แฅแแฑ แแฅแซแซแข
แฐแแณแแ แแแซแ แ แแแแแต แแญแก-
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get updateแจPVS-แตแฑแฒแฎ แฅแ แฐแแณแ แแจแแปแแฝแ แแจแแก
- wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
- wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
- apt-get update
- apt-get -y install pvs-studio-dotnetแจแแแต แแแ แญแก-
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY$PVS_NAME - แจแฐแ แแ แตแ.
$PVS_KEY - แจแแญแต แแแ.
แจแแฎแแญแต แฅแแแฝแ แแฐแแ แฉแ แต แญแแแฑ $CI_PROJECT_DIR แแฐ แแฎแแญแต แแแซแ แแ แฑแซ;
- dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.slnแแตแญแญแแ แตแแฐแ, แแฎแแญแฑ แ แฐแณแซ แแแณ แแแแฃแต แ แแ แต, แฅแ แฅแแแแน แแฐแแ แฉแ แต แแแแต แ แแฃแธแ (แแแณแ, แ แตแแแแแน แจ NuGet แฅแ แแฝ แแแจแต แ แแฃแธแ).
แ แ แ แแตแจแ แจแแแต แแจแแ แจแซแ แจแ แซแฃแข แฐแแแแฎแฝแ แแแแแต แญแฝแแแข แ แแฅแญ, แฅแ แ แแ - แ แญแทแ CI/แฒแฒ.

แ แแจแแฐแ แแตแฎแต แแตแฅ แแฅแแ แซแแ แฐแแแแฎแฝแฃ แ แ แแซแฉ แแญ แ แแ แ แ
แซแตแญแ แแญแ แฅแ แฐแแแแฎแฝแ แซแญแแข แแคแฑ แจแแจแฐแแ แแแ แ แแ แต.

แ แแ แแฐ แตแแฐแแ แแแต แฅแแฝแแแ. แ แแแแชแซ แฃ แแฐแแ แตแแฐแ แตแญแชแแต แฅแแจแแญแข แแฐ แฃแแฒแซ -t แแฐ แฃแแฒแซ แจแแแตแแแ แแแแต แแแ -o แจแตแแณแ แแคแถแน แจแแแแ แตแ แแญแ แฑแซ แญแแแข แฅแ แฐแแ แจแแแแป แฎแต แแแแต แ แแ. แ แแ
แแณแญ แแญ, แจแแแแป แฎแต แ แแฐแแฐแ แแ
แต แแตแ แแแแซแแฝ แจแฐแฐแก แแจแแแฝแ แฒแญแ แตแซแแ แแแแ แแแแต แ แแ. แ
แแญแก แแ แฅแแฐแแแตแ แฅแแแก-
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fiแจแแแแป แฎแถแฝ แ แขแตแแตแญ แแญแ แแญ แญแฐแซแแข แแแณแแฃ แตแแณแแ แแตแ แแแแซแแฝแ แซแตแจแฐแ แจแแแแป แฎแฑ 8 แญแแแแข แแแฑ แ แ แแต แแญ แแ แแตแฅ แซแ แ แจแแแแป แฎแฑ 4 แญแแแแข แตแแณแแ แตแ แฐแถแฝแ แซแแ แฅแ แแแฑ แ แ แแต แแญ แแ แแตแฅ แซแ แ แจแแแแป แฎแฑ แแแฑแแ แฅแดแถแฝ แญแญแแแก แจแแจแจแปแแ แจแแแแป แฎแต แแแแแต แแฅแฎแนแ แ แแต แแญ แญแจแแฉ - 8 + 4 = 12แข แตแแแ แฃ แฐแแณแ แขแตแตแ แ แแแฐแฝแฃ แ แแฐแแฐแ แแ แต แตแแฐแแซแฉ แแแณแแฝ แแจแ แแแแต แญแฝแแแข แจแแแแป แฎแถแฝ แ "pvs-studio-dotnet แจแแแแป แฎแถแฝ" แญแแ แแตแฅ แ แแญแแญ แฐแแแธแแแขLinux / macOS)" แฐแแต "".
แ แแ แ แแฃแ 8 แ แแณแญแฃแธแ แแแ แจแแแแป แฎแถแฝ แแญ แแแแต แ แแ.
- exit_code=$((($exit_code & 8)/8))แจแแแแป แฎแต แฅแ แจแแแแแแแ แจแแฅแญ แตแแฝ แฒแญแ 1 แฅแแแแแ แฃ แซแแแ แแ 0 แฅแแแแแ แข
แจแแ แฐแต แฅแซแ แตแแณแแ แแแจแแญ แแแ แ แแ แแแข แญแ แ แจแแตแจแแฝแ แ แแต แแตแญแชแแฑ แจแแแ แฆแณ แฅแแแแ แข แฅแแฒแแแ แจแแแแแแ แจแแ แฐแต แฅแซแ แฒแจแฐแต แฅแป แแแข แญแ แ แญแแตแแแข
merge:
script:
only:
- merge_requestsแแฐ แตแญแชแแฑ แซแฑ แฅแแแตแข แจแญแนแแ แแฝแ แแแ แจแแซแแแ แจแแแ แฅแแแณ แ แแฅแแแแข แ แแฃแฅ / แแ. แตแแแ แตแแฝ แฅแแญแณแตแก-
- git fetch originแ แแ แจแ แญแแซแแนแ แแฉแแต แฅแแแแแ แฅแ แแคแฑแ แแฐ แแตแฅ แฅแแตแแแ แแแ txt แแญแแก-
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txtแจแต $CI_COMMIT_SHA - แจแแจแจแปแ แแญแ แแแต แแฝ.
แ แแแ แ แฃแแฒแซแแ แ แแ แแ แจแแญแแฝแ แแญแแญ แตแแฐแ แฅแแแแซแแ -f. แแฐแ แฒแ แจแฐแแ แแแ .txt แแญแ แแฐ แฅแฑ แฅแแตแฐแแแแแ. แฐแ แแฃ แจแแ แตแแณแ แแญ แ แแแณแฐแแฃ แจแแแแป แฎแถแฝแ แฅแแแแจแณแแแก-
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fiแจแแ แฐแต แฅแซแแแ แแแแฐแฝ แจแฐแแแ แตแญแชแแต แญแ แ แญแแตแแแข
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requestsแแแ แตแญแชแแถแฝ แจแฐแฉ แ แแ แจแแแแฅ แแตแณแแป แแแฃแ แแแจแแญ แฅแป แญแแซแแข แแแซแแ แ แแ แแ แจแตแญแชแแต_แ แแ แฅแ แแแแแซ แแแ-แแแจแชแซ:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.jsonแแแแแซ แจแตแแณแ แตแ แฐแต แแแฃแ แแฐ แฐแแซแฉ แ แพแฝ แฅแแฐ HTML แแแแจแญ แจแแซแแแแ แญแแต แแแญ แแฎแแญแต แแแข แจแแแแแซแแ แจแ แแ แแญแแญ แแแแซ แแแแแต "Plog Converter Utility" แจแแแแ แแแต แญแแ แญแแแจแฑแข .
แ แแแซแฝแ แแญ แจ IDE แจ .json แแแฃ แแญ แ แ แแญ แแตแฅ แแแตแซแต แจแแแแฝแ แจแฅแแ แแณแฅ แ แแญแฃแแ แ IDE Rider. แ แ แแแ แ แ แแ แแญแแญ แแตแฅ แฐแแแฟแ .
แฅแแ แแพแต แแแแแต .gitlab-ci.yml แแแก
image: debian
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add -
- wget -O /etc/apt/sources.list.d/viva64.list
https://files.viva64.com/etc/viva64.list
- apt-get update
- apt-get -y install pvs-studio-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.jsonแ แแด แแแ แแแญ แแฐ แแญแ แจแณแจแ แ แแ แ แ แซแตแญแ แแแฆแฝแ แแตแจแ. แแแ แแแญ แตแญแญแ แแแแ แแแจแต แแฐ แญแแฑ แฒแ แญ / แฒแฒ -> แงแแงแแฝ -> แ แแแต แแญ. แจแจแญแนแแ แแฝแ แแตแฎแต แญแจแแณแแฃแ แแ แ แแจแจแป แจแแจแฐแแ แแแ แ แแ แตแข

แ แจแ แขแฎแฅ แฐแณแญแถแแณแ - แตแฌแต, แแแ แแแญ แฐแ
แ แแ. แ แแ แซแฐแจแแตแ แแแจแญ แญแฝแแแข
แจแฅแซ แแณแแแฝ
แแตแซ แแณแแฃ แแแ แแฎแแญแต แฅแแแ แญ (แ แฃแแคแต) แ แญแซแณ แแญแแฝแ แญแญแแแข แจแแซ แ แแ, แ แแ แ แญแแซแ แแตแฅ, แ แแต แแญแ แฅแป แฅแแแแฃแแ แฅแ แจแแ แฐแต แฅแซแ แแแ แจแฅ แฅแแแญแซแแ.
แแแต แแณแฎแฝแ แฅแแแแจแตแก แจแฐแปแปแแ แแญแ แตแ แฐแต แฒแญแ แฅแ แ แแญแแญแ แต แแแข แ แแแแชแซ, แตแ แฐแต แซแแ แต แแณแ.
แ แแแ แ แญแแซแ แแตแฅ แแญแ แ แ แฅแแ แ แแฎแแซแ.csแตแ แฐแถแฝแ แซแแซแ แฅแ แ แแ แ แญแแซแ แแตแฅ แแแขแ แจแฐแณแณแฐ แฎแต แจแแฏแ แฅแ แจแแ แฐแต แฅแซแ แแ แจแฅ แญแแแแแข แแ แ แญแแต แตแ แฐแต แฅแแฐแฐแซ แ แฃแ แ แตแแแ แ แญแฐแแ, แแแ แแแญ แแแฉ แแ. แแแณแ แฆแแฌแฐแฉแ แจแณแแต แญแฅแ (แ แ, ):
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}แจแแณแ แตแแณแ แแคแฑแ แจแตแ แฐแต แแญ แฅแแญแข แฅแแฒแแ แ แแต แแญแ แฅแป แแฐแแฐแแ แแแจแแแฅ แฃแแฒแซแแ แจแแฌแซแแ -r แแฐ pvs-studio-dotnet แแแป แแตแแญแก-

แฐแแณแ แตแ
แฐแต แฅแแณแแ แฅแ แ
แญแแซแแนแ แฅแแฒแแแฑ แฅแแณแแแแฐ แฅแแซแแแข
แแณแแแ แซแแแแ แตแ แฐแต แฅแแแตแฝแข แฎแฑแ แ แแตแฐแซแจแ แแญ;
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}แจแแ แฐแต แฅแซแ แตแแฐแ แแคแถแฝแก-

แฅแแฐแแแจแ, แแแ แตแ
แฐแถแฝ แ แแฐแแแ, แฅแ แจแฐแแฃแฉ แ แแแแ แจแฐแณแซ แแ แญ, แญแ
แ แแแแฐแฝ แจแแแแแ แแ.
แแฐแแฐแแซ
แ แญแแซแแฝแ แจแแแแต แ แแต แแฅแ แฎแตแ แแตแแแต แ แฃแ แแน แฅแ แ แตแฐแณแฝ แแ. แตแแแ แฃ CI/CD แจแแ แแ แจแแแฃ แฅแฑแ แแแแฐแฝ แจแแญแแแณแแต แฐแแณแ แแแญแฐแต แญแแญแฉแข แ แฐแจแแชแ, แญแ แ แฃแ แแแ แแ.
แจแฅแญแตแแ แตแฉแจแต แฅแแแฐแแแแ.
แญแ
แ แฝแแ แแฅแแแแแ แฐแแแช แณแณแแแฝ แแแซแต แจแแแแฃ แฅแฃแญแ แจแตแญแแ แแแแแแ แญแ แแแก Nikolay Mironovแข .
แแแญ: hab.com
