Microsoft.CodeAnalysis.BannedApiAnalyzer – انجمن DEV
معمولاً یک تیم حرفهای از توسعهدهندگان قوانینی برای کدنویسی همراه با بررسی کد دارند تا اطمینان حاصل کنند که کد مطابق قوانین و دستورالعملهای تیم نوشته شده است.
حتی با بررسی کد، قوانین همچنان می توانند شکسته شوند که ما را به یک بسته MCABAA NuGet Microsoft.CodeAnalysis.BannedApiAnalyzers Roslyn می رساند که راهی برای انجام یک بررسی پیش از بررسی کد و/یا هنگام نوشتن کد ارائه می دهد.
نحوه استفاده از MCABAA
- بسته را به یک پروژه اضافه کنید
- یک فایل متنی با نام BannedSymbols.txt در پوشه اصلی پروژه ایجاد کنید.
فایل پروژه را با دوبار کلیک کردن روی فایل پروژه در Solution Explorer بررسی کنید و به نحوه قرار دادن فایل ممنوعه توجه کنید.
<ItemGroup>
<None Remove="BannedSymbols.txt" />
</ItemGroup>
<ItemGroup>
<AdditionalFiles Include="BannedSymbols.txt" />
</ItemGroup>
افزودن قوانین
مثال 1
فرض کنید برای کار با پایگاه داده SQL-Server با ارائه دهنده داده بسته Microsoft.Data.SqlClient نباید استفاده شود اما در عوض هسته چارچوب نهاد. قانون زیر را اضافه کنید (زیرا اولین تماس معمولاً یک نمونه از SqlConnection ایجاد می کند.
T:Microsoft.Data.SqlClient.SqlConnection; Use EF Core instead
در صورتی که توسعهدهنده تلاش میکند از آن استفاده کند، قانون دیگری لازم است System.Data.SqlClient
T:System.Data.SqlClient.SqlConnection; Use EF Core instead
در همین راستا، از استفاده از روش محلی جلوگیری کنید.
M:Library1.Classes.DataOperations.ReadData; use EF Core instead
مثال 2
عدم استفاده از Newtonsoft.Json.JsonConvert، استفاده کنید System.Text.Json.JsonSerializer بجای.
T:Newtonsoft.Json.JsonConvert;Use System.Text.Json.JsonSerializer instead
مثال 3
غیر مجاز System.DateTime.Now به نفع استفاده System.DateTime.UtcNow
P:System.DateTime.Now;Use System.DateTime.UtcNow instead
مثال 4
تیم دو نسخه از یک کلاس دارد، در این مورد Person در دو پروژه کلاس جداگانه.
پروژه کلاسی Library1 کلاس شخص
public class Person
{
public int Id { get; set; }
public string Type { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime? BirthDate { get; set; }
}
پروژه کلاس Library2 کلاس شخص
public class Person
{
public int Id { get; set; }
public string Type { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public DateOnly? BirthDate { get; set; }
}
Library1 برای پروژه از قبل موجود است، بنابراین باید باقی بماند، اما برای پروژه های جدید، از Library2 استفاده کنید. موارد زیر را اضافه می کنیم.
T:Library1.Models.Person;Use Library2.Models.Person which uses DateOnly rather than DateTime.
پیدا کردن قوانین شکسته
پروژه(ها) را بسازید و لیست خطاها را در ویژوال استودیو بررسی کنید.
کد با قوانین شکسته چگونه به نظر می رسد
برگه تقلب قوانین
صفحه زیر را ببینید
هشدارها
- پرونده BannedSymbols.txt را می توان در پوشه ای خارج از پروژه قرار داد، اما ممکن است همیشه کار نکند.
- قوانین را نمی توان برای روش های پسوند زبان اعمال کرد.
کد منبع
به جای صرف زمان برای راه اندازی یک پروژه، مخزن GitHub زیر را شبیه سازی کنید.