مطالب
تبدیل قالب‌های سفارشی پروژه‌های NET Core. به بسته‌های NuGet
در مطلب «امکان ساخت قالب برای پروژه‌های NET Core.» با مقدمات تبدیل یک پروژه‌ی سفارشی سازی شده، به یک قالب ایجاد پروژه‌های جدید NET Core. آشنا شدیم. اگر علاقمند باشید می‌توانید قالب‌های خود را به صورت بسته‌های نیوگت نیز با دیگران به اشتراک بگذارید. برای نمونه تمام قالب‌هایی را که توسط دستور dotnet new قابل نصب هستند، می‌توانید در مسیر ذیل، در سیستم خود پیدا کنید:
 %userprofile%\.templateengine\dotnetcli


و یا قالبی را که در قسمت قبل، به سیستم dotnet new اضافه کردیم، مدخل تعریف آن، در فایل templatecache.json ذیل، ثبت شده‌است (short name آن‌را در این فایل جستجو کنید):
 %userprofile%\.templateengine\dotnetcli\v2.0.0-preview2-006497\templatecache.json

برای حذف قالب تعریف شده از سیستم dotnet new،  تنها دستور ذیل وجود دارد که سبب حذف تعریف تمام قالب‌های سفارشی جدید می‌شود:
 dotnet new --debug:reinit


ساخت بسته‌ی نیوگت از قالب سفارشی


- برای ساخت بسته‌ی نیوگت، ابتدا یک پوشه‌ی مجزا را خارج از پروژه‌ی خود ایجاد کنید (تصویر فوق).
- سپس آخرین نگارش فایل nuget.exe را از آدرس https://dist.nuget.org/index.html دریافت کنید و به داخل این پوشه کپی نمائید.
- فایل pack.bat دارای این یک سطر است:
 nuget pack .\nuget\Templates.nuspec
کار آن پردازش فایل Templates.nuspec و تولید بسته‌ی نیوگت متناظر با آن است.


- در ادامه داخل پوشه‌ی nuget، مطابق تصویر فوق، پوشه‌ای به نام Content و فایل خالی Templates.nuspec را ایجاد کنید.
پوشه‌ی Content در برگیرنده‌ی قسمتی از پروژه‌است که قرار است درون بسته‌ی نیوگت قرارگیرد (یعنی تمام فایل‌های پروژه به همراه پوشه‌ی مخصوص template.config. باید به اینجا کپی شوند). برای مثال پوشه‌های Bin و Obj و یا اسکریپت‌های جانبی را می‌شود در اینجا لحاظ نکرد.
- محتوای فایل Templates.nuspec یک چنین ساختاری را دارد:
<?xml version="1.0" encoding="utf-8"?>
<package 
    xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>DNT.Identity</id>
        <version>1.0.0</version>
        <description>Empty DNT.Identity project</description>
        <authors>VahidN (https://www.dntips.ir/)</authors>
        <language>en-US</language>
        <projectUrl>https://github.com/VahidN/DNTIdentity</projectUrl>
        <licenseUrl>https://github.com/VahidN/DNTIdentity/blob/master/LICENSE.md</licenseUrl>
        <packageTypes>
            <packageType name="Template" />
        </packageTypes>
    </metadata>
</package>
که در آن، نام، شماره و توضیحاتی در مورد پروژه ذکر می‌شوند. همچنین نوع این بسته به Template تنظیم خواهد شد.

- اکنون فایل pack.bat را اجرا کنید. پس از آن فایلی مانند DNT.Identity.1.0.0.nupkg تولید خواهد شد که آن‌را می‌توان در سایت nuget.org مانند سایر بسته‌های نیوگت آپلود کرد و به اشتراک گذاشت.

یک نکته: می‌شد فایل nuget.exe و pack.bat را در کنار پوشه‌ی Content و فایل Templates.nuspec هم قرار داد. در این حالت پس از اجرای دستور nuget pack، فایل‌های exe و bat نیز داخل فایل نهایی تولیدی قرار می‌گرفتند. بنابراین بهتر است این‌ها را درون یک پوشه قرار نداد.


نحوه‌ی نصب یک قالب جدید پروژه‌های NET Core. از طریق نیوگت

پس  از آپلود فایل nupkg حاصل در سایت nuget.org، اکنون نحوه‌ی نصب آن در سیستم به صورت ذیل است:
در حالت عمومی:
 dotnet new --install [name]::[version]
و یا در اینجا:
 dotnet new --install DNT.Identity::*
*:: به معنای نصب آخرین نگارش موجود است.


همانطور که در تصویر فوق نیز ملاحظه می‌کنید، این قالب جدید در کنار سایر قالب‌های پیش‌فرض SDK مربوط به NET Core. قرار گرفته‌است.

اکنون کار با این قالب نصب شده، همانند قسمت «نحوه‌ی ایجاد یک پروژه‌ی جدید بر اساس قالب نصب شده» مطلب پیشین است:
 dotnet new dntidentity -n MyNewProj
نظرات مطالب
ساخت بسته‌های نیوگت مخصوص NET Core.
یک نکته‌ی تکمیلی

اگر قصد تولید بسته‌ی نیوگتی را دارید و این بسته برای NET Standard 2.0. تهیه شده‌است، نیوگت اجازه می‌دهد تا این بسته توسط پروژه‌های دات نت فریم ورک 4.6.1 به بعد هم استفاده شود که نباید اینگونه باشد و باید به 4.7.2 یا بیشتر محدود شود.
نظرات مطالب
ساخت بسته‌های نیوگت مخصوص NET Core.
یک نکته‌ی تکمیلی: چگونه فایل README.txt را به بسته‌های نیوگت NET Core. اضافه کنیم؟

Visual Studio اگر فایل README.txt را در پوشه‌ی ریشه‌ی یک بسته‌ی نیوگت پیدا کند، پس از نصب بسته، به صورت خودکار آن‌را نمایش می‌دهد. بنابراین با استفاده از این فایل ویژه می‌توان نکات جدید مرتبط با بسته‌ی نیوگت، راهنما و یا مثال‌هایی را به استفاده کننده نمایش داد. اما در پروژه‌های NET Core.، چگونه می‌توان این فایل را در زمان فراخوانی دستور dotnet pack، به بسته‌ی نهایی تولید شده اضافه کرد؟
<Project>
  …
  <ItemGroup>
    <Content Include="README.txt">
      <Pack>true</Pack>
      <PackagePath>README.txt</PackagePath>
    </Content>
  </ItemGroup>
  …
</Project>
در اینجا تغییرات لازم فایل csproj را جهت الحاق فایل README.txt مشاهده می‌کنید.
Include به مسیر فایل الحاق شده اشاره می‌کند. این مسیر نسبت به ریشه‌ی پروژه‌ی جاری محاسبه می‌شود.
Pack الحاق و یا عدم الحاق فایل را تنظیم می‌کند.
PackagePath به مسیر نهایی این فایل در بسته‌ی نیوگت اشاره می‌کند و نسبت به ریشه‌ی آن درنظر گرفته خواهد شد.
اشتراک‌ها
StructureMap 3.0 منتشر شد
خطاهای بهتر و با مفهوم‌تری را تولید می‌کند. روی کارآیی و سرعت آن کار شده‌است. موارد مرتبط با ASP.NET آن به بسته‌ی نیوگت دیگری به نام StructureMap.Web منتقل شده‌است و ...
StructureMap 3.0 منتشر شد