در مطلب «امکان ساخت قالب برای پروژههای NET Core.» با مقدمات تبدیل یک پروژهی سفارشی سازی شده، به یک قالب ایجاد پروژههای جدید NET Core. آشنا شدیم. اگر علاقمند باشید میتوانید قالبهای خود را به صورت بستههای نیوگت نیز با دیگران به اشتراک بگذارید. برای نمونه تمام قالبهایی را که توسط دستور dotnet new قابل نصب هستند، میتوانید در مسیر ذیل، در سیستم خود پیدا کنید:
و یا قالبی را که در قسمت قبل، به سیستم dotnet new اضافه کردیم، مدخل تعریف آن، در فایل templatecache.json ذیل، ثبت شدهاست (short name آنرا در این فایل جستجو کنید):
برای حذف قالب تعریف شده از سیستم dotnet new، تنها دستور ذیل وجود دارد که سبب حذف تعریف تمام قالبهای سفارشی جدید میشود:
ساخت بستهی نیوگت از قالب سفارشی
- برای ساخت بستهی نیوگت، ابتدا یک پوشهی مجزا را خارج از پروژهی خود ایجاد کنید (تصویر فوق).
- سپس آخرین نگارش فایل nuget.exe را از آدرس https://dist.nuget.org/index.html دریافت کنید و به داخل این پوشه کپی نمائید.
- فایل pack.bat دارای این یک سطر است:
کار آن پردازش فایل Templates.nuspec و تولید بستهی نیوگت متناظر با آن است.
- در ادامه داخل پوشهی nuget، مطابق تصویر فوق، پوشهای به نام Content و فایل خالی Templates.nuspec را ایجاد کنید.
پوشهی Content در برگیرندهی قسمتی از پروژهاست که قرار است درون بستهی نیوگت قرارگیرد (یعنی تمام فایلهای پروژه به همراه پوشهی مخصوص template.config. باید به اینجا کپی شوند). برای مثال پوشههای Bin و Obj و یا اسکریپتهای جانبی را میشود در اینجا لحاظ نکرد.
- محتوای فایل Templates.nuspec یک چنین ساختاری را دارد:
که در آن، نام، شماره و توضیحاتی در مورد پروژه ذکر میشوند. همچنین نوع این بسته به 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، اکنون نحوهی نصب آن در سیستم به صورت ذیل است:
در حالت عمومی:
و یا در اینجا:
*:: به معنای نصب آخرین نگارش موجود است.
همانطور که در تصویر فوق نیز ملاحظه میکنید، این قالب جدید در کنار سایر قالبهای پیشفرض SDK مربوط به NET Core. قرار گرفتهاست.
اکنون کار با این قالب نصب شده، همانند قسمت «نحوهی ایجاد یک پروژهی جدید بر اساس قالب نصب شده» مطلب پیشین است:
%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
- در ادامه داخل پوشهی 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>
- اکنون فایل 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، به بستهی نهایی تولید شده اضافه کرد؟
در اینجا تغییرات لازم فایل csproj را جهت الحاق فایل README.txt مشاهده میکنید.
Include به مسیر فایل الحاق شده اشاره میکند. این مسیر نسبت به ریشهی پروژهی جاری محاسبه میشود.
Pack الحاق و یا عدم الحاق فایل را تنظیم میکند.
PackagePath به مسیر نهایی این فایل در بستهی نیوگت اشاره میکند و نسبت به ریشهی آن درنظر گرفته خواهد شد.
Visual Studio اگر فایل README.txt را در پوشهی ریشهی یک بستهی نیوگت پیدا کند، پس از نصب بسته، به صورت خودکار آنرا نمایش میدهد. بنابراین با استفاده از این فایل ویژه میتوان نکات جدید مرتبط با بستهی نیوگت، راهنما و یا مثالهایی را به استفاده کننده نمایش داد. اما در پروژههای NET Core.، چگونه میتوان این فایل را در زمان فراخوانی دستور dotnet pack، به بستهی نهایی تولید شده اضافه کرد؟
<Project> … <ItemGroup> <Content Include="README.txt"> <Pack>true</Pack> <PackagePath>README.txt</PackagePath> </Content> </ItemGroup> … </Project>
Include به مسیر فایل الحاق شده اشاره میکند. این مسیر نسبت به ریشهی پروژهی جاری محاسبه میشود.
Pack الحاق و یا عدم الحاق فایل را تنظیم میکند.
PackagePath به مسیر نهایی این فایل در بستهی نیوگت اشاره میکند و نسبت به ریشهی آن درنظر گرفته خواهد شد.
اشتراکها
StructureMap 3.0 منتشر شد
نظرات مطالب
آشنایی و بررسی ابزار MiniProfiler
برای EF 6 یک بستهی نیوگت جداگانه دارد. اطلاعات بیشتر
اشتراکها
ساخت داشبورد رایگان و متن باز
نظرات مطالب
C# 7 - Tuple return types and deconstruction
یک نکتهی تکمیلی
پس از نصب و استفاده از NET 4.7. دیگر نیازی به افزودن بستهی نیوگت System.ValueType نیست و این نوع جزئی از فریم ورک است.
پس از نصب و استفاده از NET 4.7. دیگر نیازی به افزودن بستهی نیوگت System.ValueType نیست و این نوع جزئی از فریم ورک است.