<Project>
<PropertyGroup>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<AnalysisLevel>latest</AnalysisLevel>
<AnalysisMode>All</AnalysisMode>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Meziantou.Analyzer" Version="2.0.257">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="SonarAnalyzer.CSharp" Version="10.16.0.128591">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Roslynator.Analyzers" Version="4.14.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="xunit.analyzers" Version="1.26.0">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>
نقش هر analyzer:
🔸️SonarAnalyzer.CSharp:
روی کیفیت کد، آسیبپذیریهای امنیتی و code smell تمرکز دارد. متدهای پیچیده، کدهای تکراری و باگهای احتمالی را شناسایی میکند.
🔹️Meziantou.Analyzer:
مشکلات performance، ضعفهای امنیتی و استفادهی نادرست از APIها را پیدا میکند. صدها قانون برای async/await، LINQ، string handling و موارد دیگر دارد.
🔸️Roslynator.Analyzers:
پیشنهادهای refactoring و تحلیل کد ارائه میدهد و کمک میکند کد تمیزتر و idiomaticتری در #C بنویسید.
🔹️xunit.analyzers:
درست نوشتن تستها را enforce میکند و اشتباهات رایج مثل نبود assertion یا attribute اشتباه را شناسایی میکند.
تنظیم IncludeAssets باعث میشود این analyzerها فقط در زمان کامپایل اجرا شوند و وارد خروجی نهایی برنامه نشوند. 📦
با فعال بودن TreatWarningsAsErrors، اگر هر analyzer مشکلی پیدا کند، build شکست میخورد.
شاید سختگیرانه به نظر برسد، اما جلوی انباشته شدن technical debt را میگیرد.
شما همیشه باید تلاش کنید پروژهتان صفر هشدار داشته باشد. بسیاری از توسعهدهندهها هشدارها را نادیده میگیرند، اما هشدارها معمولاً نشانهی مشکلات واقعی هستند که بعداً تبدیل به باگ میشوند. 🐞
3️⃣ Enforce Coding Standards
اعمال استانداردهای کدنویسی 📏
ءAnalyzerها مشکلات را شناسایی میکنند، اما شما همچنین باید مشخص کنید کدام قوانین برای تیم شما مهم هستند و میزان سختگیری آنها چقدر باشد.
فایل editorconfig. استانداردهای کدنویسی را تعریف میکند و سطح severity هر قانون analyzer را مشخص میکند. شما میتوانید قوانین را بهصورت error، warning، suggestion علامتگذاری کنید یا کاملاً غیرفعالشان کنید.
این فایل را در همان دایرکتوری فایل sln. قرار دهید. همهی توسعهدهندگان تیم شما، بدون توجه به اینکه از چه IDEای استفاده میکنند، بهصورت خودکار از یک مجموعه قوانین یکسان پیروی خواهند کرد. 🤝
یک فایل پایهی editorconfig. برای شروع: