اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
چهار دقیقه
یکی از مواردی را که در حین ارتقاء پروژههای خود به 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
البته اگر از نگارشهای کمتر از 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>
<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>
<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>