TGViewer
C# Geeks (.NET) C# Geeks (.NET) @csharpgeeks · 550 subscribers
Post #509 183
Static Code Analysis در .NET 🔍⚙️

ءNET. دارای Roslyn analyzerهای داخلی است که کد #C شما را برای مشکلات مربوط به سبک کدنویسی و کیفیت بررسی می‌کنند. اگر پروژه شما NET 5. یا بالاتر را هدف قرار دهد، code analysis به‌صورت پیش‌فرض فعال است.

بهترین روشی که من برای پیکربندی static code analysis پیدا کرده‌ام، استفاده از Directory.Build.props است. این یک فایل XML است که در آن می‌توانید ویژگی‌های مشترک پروژه‌ها را پیکربندی کنید. می‌توانید فایل Directory.Build.props را در پوشه ریشه قرار دهید تا برای تمام پروژه‌ها اعمال شود. 📁✨

می‌توانید TargetFramework، ImplicitUsings، Nullable (nullable reference types)، و غیره را پیکربندی کنید. اما آنچه برای ما مهم است، پیکربندی static code analysis است.

در ادامه برخی ویژگی‌هایی که می‌توانیم پیکربندی کنیم آورده شده است:

• TreatWarningsAsErrors –
همه warningها را به error تبدیل می‌کند.

• CodeAnalysisTreatWarningsAsErrors–
هشدارهای کیفیت کد (CAxxxx) را به error تبدیل می‌کند.

• EnforceCodeStyleInBuild –
قوانین مربوط به تحلیل سبک کد ("IDExxxx") را فعال می‌کند.

• AnalysisLevel –
مشخص می‌کند کدام analyzerها فعال شوند. مقدار پیش‌فرض latest است.

• AnalysisMode –
پیکربندی تحلیل کد پیش‌فرض را تنظیم می‌کند.

همچنین می‌توانیم بسته‌های NuGet اضافی را در پروژه‌ها نصب کنیم. SonarAnalyzer.CSharp مجموعه‌ای از analyzerهای اضافی دارد که به ما کمک می‌کند کدی تمیز، ایمن و قابل‌اعتماد بنویسیم. این کتابخانه توسط همان شرکتی توسعه یافته که SonarQube را ساخته است. 🧪🔒
<Project>
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>

<!-- Configure code analysis. -->
<AnalysisLevel>latest</AnalysisLevel>
<AnalysisMode>All</AnalysisMode>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>

<ItemGroup Condition="'$(MSBuildProjectExtension)' != '.dcproj'">
<PackageReference Include="SonarAnalyzer.CSharp" Version="*">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>
runtime; build; native; contentfiles; analyzers; buildtransitive
</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>

ءAnalyzerهای داخلی NET. و analyzerهای موجود در SonarAnalyzer.CSharp می‌توانند بسیار مفید باشند. اما گاهی اوقات ممکن است با تعداد زیادی هشدار در هنگام build باعث ایجاد سروصدا شوند. ⚠️📢

وقتی با قوانین تحلیل کدی مواجه می‌شوید که از نظر شما مفید نیستند، می‌توانید آن‌ها را غیرفعال کنید. می‌توانید قوانین تحلیل کد را به صورت جداگانه در فایل editorconfig. پیکربندی کنید.
# S125: Sections of code should not be commented out
dotnet_diagnostic.S125.severity = none

# S1075: URIs should not be hardcoded
dotnet_diagnostic.S1075.severity = none

# S2094: Classes should not be empty
dotnet_diagnostic.S2094.severity = none

# S3267: Loops should be simplified with "LINQ" expressions
dotnet_diagnostic.S3267.severity = none
More from @csharpgeeks
  1. Sep 22, 2026یه مدتی قراره از دنیای NET. فاصله بگیرم، چون وقتشه برم سربازی. راستش نمیدونم این مدت رو چج…
  2. Sep 20, 2026🔥 حالا مشکل اصلی: Alert Storm فرض کن Database از دسترس خارج شده. ۱۰۰ Pod داری. هر Pod می‌…
  3. Sep 20, 2026🚨 طراحی سیستم Monitoring و Alerting در یک سیستم بزرگ فرض کن ساعت ۳ صبح است. سیستم شما با…
  4. Sep 19, 2026#Engineering_Leadership تصمیم نگرفتن هم یک تصمیم است یه چیز عجیب توی تیم‌های مهندسی: گاهی…
  5. Sep 19, 2026☑ چک‌لیست آماده‌سازی تیم، فرایندها و زیرساخت برای توسعه با AI توجه: هیچ چک‌لیستی جهان‌شمول…
  6. Sep 19, 2026📌پایان یک انتظار طولانی: اعتبارسنجی ناهمگام (Async Validation) در NET 11.
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →