یکی از مواردی را که در حین ارتقاء پروژههای خود به NET 5.0. و C# 9.0 احتمالا مشاهده خواهید کرد، گزارش خطاهای کامپایلری است که پیشتر با نگارشهای قبلی #C و NET Core.، اصلا خطا نبوده و بدون مشکل کامپایل میشدند. یعنی کدی که با NET Core SDK 3x. بدون مشکل کامپایل میشود، الزامی ندارد که با NET 5.0 SDK. نیز کامپایل شود. در این مطلب، تغییرات صورت گرفتهی در تنظیمات کامپایلر #C را در NET 5.0 SDK.، بررسی میکنیم.
معرفی AnalysisLevel در کامپایلر C# 9.0 و .NET 5.0 SDK
سالها است که تیم کامپایلر #C قصد داشتهاست تا اخطارهای بیشتری را به توسعه دهندگان نمایش دهد؛ اما چون ممکن بود در حالت تنظیم پروژه جهت تبدیل اخطارها به خطا، اینکار به عملی ناخوشایند تبدیل شود، آنرا انجام نداده بودند. با ارائهی NET 5.، گزینهی جدیدی به نام AnalysisLevel، به تنظیمات کامپایلر C# 9.0 اضافه شدهاست که توسط آن میتوان سطوح نمایش خطاها و اخطارهای ارائه شده را تنظیم کرد. حالت پیشفرض آن برای پروژههای مبتنی بر net5.0، به عدد 5 تنظیم شدهاست و حتی این مورد را برای سایر SDKها نیز میتوان تنظیم کرد:
Target Framework Default for AnalysisLevel
net5.0 5
netcoreapp3.1 or lower 4
netstandard2.1 or lower 4
.NET Framework 4.8 or lower 4
عدد 5 پیشفرض در اینجا سبب خواهد شد تا تعداد اخطارهای قابل ملاحظهای را دریافت کنید؛ مواردی را که پیشتر با نگارشهای قبلی کامپایلر #C، از آنها ناآگاه بودید.
البته اگر از نگارشهای کمتر از net5.0 استفاده میکنید نیز میتوانید یک سطر AnalysisLevel زیر را به صورت دستی به فایل csproj خود اضافه کنید تا از اخطارهای بیشتری آگاه شوید:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<!-- get more advanced warnings for this project -->
<AnalysisLevel>5</AnalysisLevel>
</PropertyGroup>
</Project>
یک نکته: اگر میخواهید همواره آخرین حد اخطارهای موجود ممکن را مشاهده کنید، مقدار AnalysisLevel را به latest تنظیم کنید:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<!-- be automatically updated to the newest stable level -->
<AnalysisLevel>latest</AnalysisLevel>
</PropertyGroup>
</Project>
با اینکار با نصب یک SDK جدید، نیازی به به روز رسانی مقدار AnalysisLevel نخواهد بود و یا اگر میخواهید بالاترین سطح ممکن و حتی موارد آزمایشی را نیز بر روی پروژهی خود آزمایش کنید، مقدار سطح آنالیز را به preview تنظیم نمائید:
<AnalysisLevel>preview</AnalysisLevel>
و یا اگر نمیخواهید تا این اخطارهای جدید را مشاهده کنید، آنرا غیرفعال کنید:
<!-- I am just fine thanks -->
<AnalysisLevel>none</AnalysisLevel>
معرفی AnalysisMode در کامپایلر C# 9.0 و NET 5.0 SDK.
از زمان ارائهی NET 5.0 RC2.، گزینهی جدید دیگری به نام AnalysisMode نیز به تنظیمات کامپایلر C# 9.0 اضافه شدهاست:
<PropertyGroup>
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
</PropertyGroup>
هدف از آن انجام کنترل کیفیت بر روی کدها و ارائهی آنها به صورت اخطارهای کامپایلر است. این گزینه سه مقدار را میتواند داشته باشد:
- Default: در این حالت
تعداد کمی از گزینههای کنترل کیفیت فعال هستند.
- AllEnabledByDefault: شدیدترین حالت ممکن؛ با انتخاب آن تمام گزینههای تعریف شده به صورت اخطارهای کامپایلر ظاهر میشوند.
- AllDisabledByDefault: جهت غیرفعال کردن این گزینه.
نکته 1: اگر میخواهید این اخطارها به صورت خطاهای کامپایلر ظاهر شوند، گزینهی CodeAnalysisTreatWarningsAsErrors را به true تنظیم کنید:
<PropertyGroup>
<CodeAnalysisTreatWarningsAsErrors>false</CodeAnalysisTreatWarningsAsErrors>
</PropertyGroup>
نکته 2: آنالیز کدها در پروژههای مبتنی بر NET 5.0 SDK. به صورت خودکار فعال است. اگر میخواهید آنها را در نگارشهای پیشین NET Core. هم فعال کنید، خاصیت EnableNETAnalyzers را به true تنظیم نمائید:
<PropertyGroup>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
</PropertyGroup>
لیست کامل مواردی که توسط این گزینه بررسی میشوند.
امکان بررسی استایل کد نویسی در کامپایلر C# 9.0 و NET 5.0 SDK.
گزینهی امکان بررسی
استایل کدنویسی در کامپایلر C# 9.0، هنوز در مرحلهی آزمایشی به سر میبرد. به همین جهت به صورت پیشفرض غیرفعال است. اگر میخواهید آنرا فعال کنید، روش آن به صورت زیر است که پس از آن، مشکلات موجود به صورت اخطارهایی ظاهر خواهند شد:
<PropertyGroup>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
روش اعمال سراسری تنظیمات کامپایلر به تمام پروژههای یک Solution
اگر Solution شما از چندین زیر پروژه تشکیل شدهاست، یا میتوانید تنظیمات یاد شده را یکی یکی به هر کدام اضافه کنید و یا یک فایل مخصوص
Directory.Packages.props را در بالاترین پوشهی Solution خود ایجاد کرده و آنرا به صورت زیر تکمیل نمائید:
<Project>
<PropertyGroup>
<AnalysisLevel>latest</AnalysisLevel>
<AnalysisMode>AllEnabledByDefault</AnalysisMode>
<CodeAnalysisTreatWarningsAsErrors>true</CodeAnalysisTreatWarningsAsErrors>
<EnableNETAnalyzers>true</EnableNETAnalyzers>
<EnforceCodeStyleInBuild>true</EnforceCodeStyleInBuild>
</PropertyGroup>
</Project>