استفاده از ویژوال استودیو و جعبه ابزار تبدیل قالب متن (T4) برای تولید خودکار کد
محیط عملیاتی
- ویژوال استودیو
-
- ویژوال استودیو 2022
- .خالص
-
- دات نت 8.0
- ویندوز
-
- ویندوز 11
پیش نیازها
- ویژوال استودیو
-
- حتی با نسخه تا حدودی قدیمی تر نیز کار می کند
- .خالص
-
- حتی با نسخه تا حدودی قدیمی تر نیز کار می کند
در ابتدا
به طور معمول، هنگام ایجاد کد، فکر می کنید که با تایپ دستی کاراکترها، یک کد ایجاد می کنید، اما اگر می خواهید کدی را بر اساس کد یا داده هایی ایجاد کنید که باید توسط یک قانون خاص ایجاد شود، راحت است که بتوانید به طور خودکار آن را تولید کنید. این بخش نحوه استفاده از جعبه ابزار تبدیل قالب متن (T4) برای تولید خودکار کد را توضیح می دهد.
از آنجایی که T4 یک فرمت اسکریپت نویسی است، تولید کد در ویژوال استودیو بلافاصله پس از ایجاد فایل T4 بسیار آسان است. نوشته شده است که به طور خودکار کد تولید می کند، اما آنچه تولید می شود فقط متن است، بنابراین می توان علاوه بر برنامه ها، هر چیزی را در قالب متن مانند XML و JSON نیز تولید کرد.
هدف اصلی این نکته توضیح مراحل تولید خودکار کد در T4 است، بنابراین من به طور عمیق وارد جزئیات T4 نمی شوم. اگر تا به حال برنامه ای را در C# نوشته باشید، بلافاصله آن را درک خواهید کرد. اگر می خواهید در مورد T4 بیشتر بدانید، لطفا وب سایت رسمی و سایر سایت ها را بررسی کنید.
پیش شرط
این نکته موارد زیر را فرض می کند:
- ویژوال استودیو روی ویندوز نصب شده است
- درک #C
T4 را می توان در اکثر پروژه ها استفاده کرد، به استثنای چند مورد، بنابراین شما اساسا آزاد هستید که حجم کار خود را در حین نصب انتخاب کنید.
یک پروژه ایجاد کنید
همانطور که قبلا ذکر شد، T4 را می توان در اکثر پروژه ها استفاده کرد، به استثنای چند مورد، بنابراین مهم نیست که چه نوع پروژه ای ایجاد می کنید. در این مورد، ما در حال ایجاد یک پروژه برای یک برنامه کنسول هستیم.
ایجاد یک فایل T4 (.tt)
روی فایل یا پوشه پروژه کلیک راست کنید تا یک مورد جدید اضافه شود.
روی دکمه View All Templates کلیک کنید.
"General" را از درخت سمت چپ و "Text Templates" را از لیست وسط انتخاب کنید. نام فایل دلخواه است.
بلافاصله پس از ایجاد فایل، ممکن است گفتگویی شبیه به پنجره زیر مشاهده کنید. این زمانی نمایش داده می شود که فایل T4 به طور خودکار تولید شود. فایل های T4 هر بار که فایل ذخیره یا مشاهده می شود به طور خودکار تولید می شوند. اگر می خواهید فرآیند تولید خودکار را همانطور که هست انجام دهید، روی دکمه "تأیید" کلیک کنید. اگر نمی خواهید کادر گفتگو هر بار ظاهر شود، «این پیام را دوباره نشان ندهید» را علامت بزنید. لطفا توجه داشته باشید که اگر یک فرآیند غیرقانونی در فایل T4 همانطور که در گفتگوی ذکر شده است توضیح داده شود، بر این اساس اجرا می شود.
پس از افزودن فایل، می بینید که فایل .tt به Solution Explorer اضافه شده است.
محتویات فایل به شرح زیر است.
اگر فایل .tt را در Solution Explorer استخراج کنید، یک فایل متنی با همین نام مشاهده خواهید کرد. این فایل تولید شده خودکار خواهد بود. از آنجایی که ما هنوز چیزی ننوشته ایم، محتویات فایل خالی است.
یک فایل تولید شده خودکار را به یک فایل .cs تبدیل کنید
اگر از T4 استفاده می کنید، به احتمال زیاد می خواهید از افزونه .cs به جای .txt پیش فرض استفاده کنید، زیرا کد برنامه شما به طور خودکار تولید می شود.
در این صورت، فایل tt را باز کرده و output
extension
.cs
آن را با ذخیره کنید.
فایل تولید شده به صورت خودکار اکنون باید پسوند .cs داشته باشد. خود نام فایل همان فایل tt است، بنابراین اگر می خواهید آن را تغییر دهید، نام فایل tt را تغییر دهید.
در حال حاضر، چیزی بنویسید و آن را در یک فایل تولید شده خودکار خروجی دهید
در T4، محتوای آنچه می نویسید اساسا همانطور که هستند خروجی هستند.
<# ... #>
فرآیند T4 است و بقیه متن خروجی واقعی است.
به عنوان مثال، بیایید آن را در یک فایل .tt به صورت زیر قرار دهیم.
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
public static class Sample
{
public static void Hello()
{
Console.WriteLine("Hello T4!!");
}
}
هنگامی که آن را ذخیره می کنید، فایل تولید شده خودکار باید دقیقا همانطور که شما آن را نوشته اید خروجی دهد.
خروجی کد است، بنابراین البته می توان آن را از Program.cs نیز فراخوانی کرد.
سعی کنید به طور خودکار کد تولید کنید
همانطور که در بالا ذکر شد، من تأیید کردم که آنچه نوشتم همانطور که هست خروجی خواهد بود، اما این تفاوتی با آنچه به طور معمول نوشتم ندارد. اکنون، بیایید در واقع از اسکریپت T4 برای تولید خودکار کد استفاده کنیم. روش های بسیار متنوعی برای ساخت آن وجود دارد، بنابراین لطفا فقط یک توضیح مختصر در اینجا ارائه دهید و سپس آن را همانطور که می خواهید بازسازی کنید.
این بار، به عنوان مثال، بیایید متدی ایجاد کنیم که یک روش تجزیه از هر نوع را به رشته اضافه می کند و در صورت عدم تبدیل، مقدار پیش فرض مشخص شده را برمی گرداند ParseXXXX
.
این فقط یک نمونه از خلقت است، بنابراین لطفا اگر احساس می کنید که قطعاتی وجود دارد که کمبود دارد، آن را اضافه کنید.
اگر بتوانید C# را بدون توضیح جزئیات درک کنید، دیدن آن سریعتر خواهد بود، بنابراین ابتدا کد کامل را ارسال می کنم.
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
<#
List<string> types = new(){"Int", "Short", "Long", "Float", "Double", "Decimal"};
#>
public static class ParseExtensions
{
<# foreach (var type in types) { #>
<# var typeLower = type.ToLower(); #>
public static <#= typeLower #> Parse<#= type #>(this string self, <#= typeLower #> defaultValue)
{
return <#= typeLower #>.TryParse(self, out var val) ? val : defaultValue;
}
<# } #>
}
کاری که ما انجام می دهیم این است که انواع List
را برای اولین بار که با آنها ایجاد می شود تعریف می کنیم و سپس آنها foreach
را می چرخانیم تا آن تعداد روش را تولید کنیم.
بخش اسکریپت T4 به زبان C# نوشته شده است، بنابراین اگر C# را درک می کنید، باید بتوانید آن را درک کنید.
وقتی این کار را انجام می دهید، کد زیر تولید می شود:
public static class ParseExtensions
{
public static int ParseInt(this string self, int defaultValue)
{
return int.TryParse(self, out var val) ? val : defaultValue;
}
public static short ParseShort(this string self, short defaultValue)
{
return short.TryParse(self, out var val) ? val : defaultValue;
}
public static long ParseLong(this string self, long defaultValue)
{
return long.TryParse(self, out var val) ? val : defaultValue;
}
public static float ParseFloat(this string self, float defaultValue)
{
return float.TryParse(self, out var val) ? val : defaultValue;
}
public static double ParseDouble(this string self, double defaultValue)
{
return double.TryParse(self, out var val) ? val : defaultValue;
}
public static decimal ParseDecimal(this string self, decimal defaultValue)
{
return decimal.TryParse(self, out var val) ? val : defaultValue;
}
}
آنچه تولید می شود کد است، بنابراین می توانید از آن در برنامه خود همانطور که هست استفاده کنید.
کمی بیشتر در مورد T4
حتی اگر قسمت اسکریپت T4 را می توان در C# نوشت، لازم است کد T4 C# را از کد C# که در واقع تولید شده است جدا کنید.
بخشی که این تمایز را ایجاد می کند این <# .... #>
است.
<# .... #>
کدی است که به عنوان یک اسکریپت اجرا می شود، نه کدی که در واقع در قسمت اسکریپت T4 خروجی می شود.
<# .... #>
محتویات C# به خودی خود توضیح داده نشده است زیرا همانطور که هستند ، اما <# .... #>
انواع مختلفی از فریم ها وجود دارد.
روش های زیر برای استفاده از هر کدام وجود دارد.
توضیح | کد |
---|---|
<#@ .... #> |
عمدتا در اعلام هدرهای مختلف استفاده می شود. در ابتدای کد T4 در assembly اعلامیه و import استفاده می شود. |
<# .... #> |
کدی را بنویسید که توسط T4 پردازش می شود. می توان آن را به چندین خط تقسیم کرد. هر چیزی که در این محدوده توضیح داده شده است فقط به عنوان یک عملیات عمل می کند و بر متن خروجی تأثیر نمی گذارد. |
<#= .... #> |
این زمانی استفاده می شود که می خواهید مقداری مانند متغیر را به عنوان نتیجه خروجی خروجی دهید. string text = "Sample"; به عنوان مثال، اگر متغیری <#= text #> به نام بنویسید، خروجی خواهد بود Sample . |
<#+ .... #> |
برای تعریف کلاس ها و متدها استفاده می شود. اساسا در انتهای فایل T4 نوشته شده است. |
درباره ویرایشگر T4
اگر در ویژوال استودیو پسوند ندارید، باز کردن یک فایل .tt به صورت متن سیاه و سفید بدون رنگ نمایش داده می شود که دیدن آن نسبتا دشوار است.
برخی از آنها ممکن است پسوندی را برای فایل های .tt به شیوه ای آسان برای خواندن نمایش دهند، بنابراین لطفا یکی را که دوست دارید پیدا کنید. از آنجایی که توسط داوطلبان ساخته می شود، ممکن است محتوا بسته به زمان سال و نسخه ویژوال استودیو تغییر کند. افزونه ها را می توان از منوی ویژوال استودیو در زیر افزونه ها اضافه کرد.
در اینجا چیزی است که من در ویژوال استودیو 2022 با پسوندی به نام "T4 Language" دیدم.