امکان ساخت قالب برای پروژه‌های NET Core.
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: دو دقیقه

یکی از قابلیت‌های ابزار خط فرمان dotnet، امکان تبدیل یک پروژه‌ی سفارشی سازی شده، به یک قالب نصب پروژه‌های جدید بر مبنای آن است. برای مثال فرض کنید می‌خواهیم پروژه‌ی DNTIdentity را تبدیل به یک قالب جدید کنیم تا به سادگی بتوان پروژه‌های جدید را بر مبنای آن ایجاد کرد.


ساخت پوشه‌ی مخصوص template.config.

اولین قدم جهت تبدیل یک پروژه‌ی از پیش موجود، به قالبی جدید، افزودن پوشه‌ی ویژه‌ای به نام template.config. به ریشه‌ی آن است. سپس فایل خالی template.json را با محتوای ذیل به آن اضافه کنید:


{ 
  "author": "VahidN <https://www.dntips.ir/>", 
  "classifications": [ "MVC", ".NET Core", "ASP.NET Core" ],  
  "name": "Empty DNT.Identity project", 
  "identity": "DNT.Identity", 
  "shortName": "dntidentity", 
  "tags": { 
    "language": "C#" 
  }, 
  "sourceName": "ASPNETCoreIdentitySample" 
}
توضیحات:
در اینجا متادیتای تعریف شده شامل موارد ذیل است:
Author: اطلاعات نویسنده است.
Classification: امکان جستجوی بهتر این قالب را فراهم می‌کند.
Name: توضیحاتی در مورد پروژه.
Identity: نام منحصربفرد پروژه.
ShortName: نامی است که از آن جهت تولید پروژه‌های جدید، استفاده می‌شود.
SourceName: مهم‌ترین تنظیم این گروه بوده و نام فضای نام اصلی پروژه‌است. زمانیکه پروژه‌ی جدیدی را ایجاد می‌کنید، این نام به صورت خودکار بر اساس نام جدید انتخابی اصلاح و جایگزین خواهد شد (در تمام پروژه‌های مربوط به solution جاری).


معرفی قالب تهیه شده به سیستم dotnet

پس از ساخت فایل template.config\template.json. در ریشه‌ی پروژه، اکنون از طریق خط فرمان به ریشه‌ی پروژه وارد شده و دستور ذیل را صادر کنید:
 dotnet new -i %~dp0
در اینجا dp0~% با آدرس پوشه‌ی جاری جایگزین می‌شود. اگر نیاز است آن‌را به صورت دستی مقدار دهی کنید.
پس از نصب این پوشه به عنوان یک قالب جدید، یکبار از سیستم وجود آن‌را کوئری بگیرید:
 dotnet new --list
اگر به خروجی آن دقت کنید، یک سطر ذیل به آن اضافه شده‌است:
Templates                                         Short Name       Language          Tags                      
---------------------------------------------------------------------------------------------------------------
Console Application                               console          [C#], F#, VB      Common/Console            
Class library                                     classlib         [C#], F#, VB      Common/Library            
Empty DNT.Identity project                        dntidentity      [C#]              MVC/.NET Core/ASP.NET Core


نحوه‌ی ایجاد یک پروژه‌ی جدید بر اساس قالب نصب شده

پس از ساخت این قالب جدید و معرفی آن به سیستم، نحوه‌ی کار با آن به صورت ذیل است:
 dotnet new dntidentity -n MyNewProj
در اینجا dntidentity همان Short Name تنظیم شده‌است و پارامتر n، نام Solution جدید را مشخص می‌کند. پس از اجرای این دستور مشاهده خواهید کرد که این نام جدید بر روی نام پوشه‌ها و همچنین فضاهای نام تولیدی به صورت خودکار اعمال شده‌است و مقدار «ASPNETCoreIdentitySample» پیش‌فرض را بازنویسی کرده‌است.

  • #
    ‫۶ سال و ۱۱ ماه قبل، یکشنبه ۹ مهر ۱۳۹۶، ساعت ۱۸:۳۰
    سلام ، ضمن تشکر 

    dotnet new dntidentity - n MyNewProj را که اجرا می‌کنم، درست اجرا نمیشه.
    • #
      ‫۶ سال و ۱۱ ماه قبل، یکشنبه ۹ مهر ۱۳۹۶، ساعت ۱۸:۴۴
      قصد دارید همین پروژه را در داخل پوشه‌ای که دقیقا همان پروژه از پیش وجود دارد، مجددا ایجاد کنید. یک پوشه‌ی جدید و خالی را در جایی ایجاد کنید (نه در داخل پوشه‌ی پروژه‌ای که از GitHub گرفتید) و سپس این دستور را در آنجا اجرا کنید.
  • #
    ‫۶ سال و ۴ ماه قبل، سه‌شنبه ۴ اردیبهشت ۱۳۹۷، ساعت ۱۵:۰۸
    با سلام. من دقیقا همین کارا رو کردم ولی نام پوشه‌ها تغییر پیدا نکرد.

    و سوال بعدی که خدمتتون داشتم این بود که آیا میتونیم همین پروژه تمپلیتمون رو به صورت مستقیم با خود ویژوال استادیو اضافه کنیم با new project

    • #
      ‫۶ سال و ۴ ماه قبل، سه‌شنبه ۴ اردیبهشت ۱۳۹۷، ساعت ۱۶:۵۴
      مشکلی مشاهده نشد. مراحل آزمایش شده به این صورت هستند:
      - فایل template.json تعریف قالب از پیش موجود هست.
      - فایل _register_template.bat جهت ثبت این قالب اجرا شد.
      - سپس یک پوشه‌ی خالی جدید در مکانی دیگر ایجاد و دستور «dotnet new dntidentity -n MyNewProj» در آن اجرا شد:

      - این قالب‌های مبتنی بر NuGet، وابستگی به IDE خاصی ندارند و بر اساس SDK آن کار می‌کنند. یعنی چندسکویی هستند.
    • #
      ‫۴ سال و ۱۱ ماه قبل، پنجشنبه ۴ مهر ۱۳۹۸، ساعت ۲۰:۰۳
      با توجه به آپدیت شدن پروژه DNTIdentity-Master با آپدیت جدید dotnetcore3، برای تهیه یک template جدید از پروژه فوق با توجه به دستور فوق ابتدا ویرایش لازم در فایل template.json صورت گرفت و سپس فایل register_template.bat اجرا گردید.سپس در پوشه‌ای جدید دستور dotnet new... اجرا گردید. ولی پوشه‌های هم نام با template پایه ایجاد می‌گردد؟
    • #
      ‫۳ سال و ۱ ماه قبل، سه‌شنبه ۲۲ تیر ۱۴۰۰، ساعت ۰۷:۰۹
      نامی که در قالب برای sourceName میگذارید باید حتما با نام پروژه قالب یکی باشد.اگر نباشد این اتفاق رخ میدهد و امکان تغییر نام پروژه وجود ندارد
  • #
    ‫۶ سال و ۳ ماه قبل، پنجشنبه ۱۷ خرداد ۱۳۹۷، ساعت ۰۵:۴۷
    ضمن تشکر بعد از اجرای دستور
    dotnet new -i %~dp0

    این خطا رو می‌دهد
    C:\Projects\DNTIdentity-master>dotnet new -i %~dp0
      Restoring packages for C:\Users\Marjani\.templateengine\dotnetcli\v2.1.300\scratch\restore.csproj...
    C:\Users\Marjani\.templateengine\dotnetcli\v2.1.300\scratch\restore.csproj : error NU1101: Unable to find package %~dp0. No packages exist with this id in source(s): C:\Program Files\dotnet\sdk\NuGetFallbackFolder, Microsoft Visual Studio Offline Packages, nuget.org
      Generating MSBuild file C:\Users\Marjani\.templateengine\dotnetcli\v2.1.300\scratch\obj\restore.csproj.nuget.g.props.
      Generating MSBuild file C:\Users\Marjani\.templateengine\dotnetcli\v2.1.300\scratch\obj\restore.csproj.nuget.g.targets.
      Restore failed in 1.95 sec for C:\Users\Marjani\.templateengine\dotnetcli\v2.1.300\scratch\restore.csproj.

    • #
      ‫۶ سال و ۳ ماه قبل، پنجشنبه ۱۷ خرداد ۱۳۹۷، ساعت ۰۵:۵۲
      بجای dp0~ % مسیر پوشه‌ی جاری را دستی وارد کنید.
      • #
        ‫۶ سال و ۳ ماه قبل، پنجشنبه ۱۷ خرداد ۱۳۹۷، ساعت ۰۶:۱۰
        با وارد کردن
        dotnet new -i C:\Projects\DNTIdentity-master
        درست شد، تشکر
  • #
    ‫۶ سال و ۳ ماه قبل، چهارشنبه ۳۰ خرداد ۱۳۹۷، ساعت ۲۳:۲۳
    پس از ساخت و اجرا و بارگذاری توسط خود Visual Studio فقط نام پروژه‌ها و نام Solution و فایل مربوط به پراپرتی هر پروژه ایجاد می‌شود. بقیه ساختاری که داخل پروژه‌ها وجود داره و پوشه‌ها و کلاس‌های سی شارپ ایجاد نمیشن.
    • #
      ‫۶ سال و ۳ ماه قبل، پنجشنبه ۳۱ خرداد ۱۳۹۷، ساعت ۰۰:۳۷
      - من خیلی وقت هست VS 2017 را از سیستم پاک کردم و فقط از VS Code استفاده می‌کنم و مشکلی با آن نیست.
      - برای کار با VS 2017 نصب به روز رسانی‌های آن ضروری است.
      • #
        ‫۶ سال و ۲ ماه قبل، دوشنبه ۴ تیر ۱۳۹۷، ساعت ۰۱:۵۰
        پس از اجرای فایل _register_template داخل پروژه بارگذاری شده از مخزن گیت هاب با ارور زیر مواجه میشم : 

        • #
          ‫۶ سال و ۲ ماه قبل، دوشنبه ۴ تیر ۱۳۹۷، ساعت ۰۲:۲۳
          - چرا قسمتی از تصویر را ارسال کردید؟ چرا مشخص نیست چه دستوری اجرا شده؟
          - احتمالا بین حروف قسمت‌های مختلف نام پوشه‌ای که درست کردید «فاصله» وجود دارد. دستور «dotnet new -i» را در صفحه‌ی جاری جستجو کنید. این کل کاری است که باید انجام دهید.
  • #
    ‫۵ سال و ۱ ماه قبل، پنجشنبه ۲۷ تیر ۱۳۹۸، ساعت ۱۴:۴۵
    امکان حذف یا ویرایش قالبی که درست کردیم هست؟
    • #
      ‫۵ سال و ۱ ماه قبل، پنجشنبه ۲۷ تیر ۱۳۹۸، ساعت ۱۵:۵۶
      برای عزل آن یا از نام بسته‌ی NuGet استفاده کنید و یا مسیر کامل پوشه‌ای که فایل template.config در آن قرار دارد:
      dotnet new -u <NUGET_PACKAGE_ID>
      dotnet new -u <ABSOLUTE_Path to template.config folder>
  • #
    ‫۴ سال و ۵ ماه قبل، جمعه ۸ فروردین ۱۳۹۹، ساعت ۲۳:۰۹

      با سلام پس  از نصب قالب و اجرای  دستور dotnet new dntidentity -n StodioHAFT اروری که در عکس میبینید رو مشاهده می‌کنم

      • #
        ‫۴ سال و ۵ ماه قبل، شنبه ۹ فروردین ۱۳۹۹، ساعت ۰۲:۳۹
        بله از آخرین نسخه استفاده می‌کنم مشکلی که وجود داره  اینه که پس از نصب قالب و ورود به پوشه جدید برای ایجاد قالب جدید وقتی دستور 
        dotnet new --list رو اجرا می‌کنم دیگه قالب نصب شده در لیست قالب‌های موجود نیست 
        • #
          ‫۴ سال و ۵ ماه قبل، شنبه ۹ فروردین ۱۳۹۹، ساعت ۰۳:۴۷
          یک تصویر از زمانیکه بر روی فایل یاد شده کلیک کردید و اجرا شده، ارسال کنید.
          • #
            ‫۴ سال و ۵ ماه قبل، شنبه ۹ فروردین ۱۳۹۹، ساعت ۲۰:۲۱

            این تصویر که با دایره قرمز هم مشخص شده، 

            • #
              ‫۴ سال و ۵ ماه قبل، جمعه ۲۲ فروردین ۱۳۹۹، ساعت ۱۲:۴۴
              با هربار نصب SDK جدید، نصب قالب‌های سفارشی باید تکرار شوند.
  • #
    ‫۳ سال و ۴ ماه قبل، پنجشنبه ۱۹ فروردین ۱۴۰۰، ساعت ۱۷:۲۹
    سلام، من آخرین نسخه پروژه DNTIdentity رو Clone می‌کنم 
    و قالب سفارشی رو بر اساس این پروژه می‌سازم ولی به جای نسخه  : 
    TargetFramework>net5.0</TargetFramework> که در پروژه Clone شده هست 
    نسخه : <TargetFramework>netcoreapp1.1</TargetFramework> برای پروژه‌های جدید ایجاد میشه
    اگر ممکنه هست راهنمائی کنید 

    • #
      ‫۳ سال و ۴ ماه قبل، پنجشنبه ۱۹ فروردین ۱۴۰۰، ساعت ۱۸:۵۱
      - چه تعداد SDK را نصب کردید؟ اگر لیست dotnet --list-sdks طولانی است، بهتر است به کنترل پنل مراجعه کرده و قدیمی‌ها را حذف کنید؛ چون دیگر پشتیبانی نمی‌شوند؛ خصوصا نگارش‌های پیش از 3.1.
      - همیشه هنگام کار با قالب‌های ایجاد شده، امکان ذکر target framework هم هست:
      dotnet new somename --framework net5.0
  • #
    ‫۳ سال و ۴ ماه قبل، پنجشنبه ۱۶ اردیبهشت ۱۴۰۰، ساعت ۱۰:۱۸
    نکته تکمیلی
    در حال حاضر باید خودمان یک پوشه درست بکنیم و داخل آن دستور ایجاد پروژه رو میزنیم، به خاطر اینکه ایجاد خود پوشه پروژه هم خودکار شود، مقدار  preferNameDirectory: true ( ^ ) را به فایل template.json اضافه میکنیم.
    {
      "author": "Firstname and lastname",
      "classifications": [ ".Net core", "AspNetCore" ],
      "name": "Base project",
      "identity": "BaseProject",
      "shortName": "baseproject",
      "tags": {
        "language": "C#"
      },
      "sourceName": "DotnetCoreSample",
      "preferNameDirectory": true // Here
    }
  • #
    ‫۲ سال و ۸ ماه قبل، چهارشنبه ۸ دی ۱۴۰۰، ساعت ۱۴:۳۶
    سلام؛ تمامی مراحل بالا رو انجام میدهم و قالب جدید رو ثبت می‌کنم. ولی موقع ایجاد پروژه جدید، پروژه ایجاد میشه ولی دقیقا با نام " ASPNETCoreIdentitySample ". نه نام سولوشن تغییر میکنه و نه پروژه ها.

  • #
    ‫۱ سال و ۴ ماه قبل، شنبه ۲ اردیبهشت ۱۴۰۲، ساعت ۱۱:۱۶
    یک نکته‌ی تکمیلی
    دستوراتی که در این مطلب ذکر شدند، با پارامترهای list, --search, --install, --uninstall-- هستند. این دستورات در دات نت 7 تغییر کرده و بدون -- ابتدایی شده‌اند. یعنی برای مثال dotnet new --install به dotnet new install تغییر یافته.