روشهای زیادی برای تهیهی یک بستهی نیوگت وجود دارند، مانند استفاده از برنامهی NuGet Package Explorer و یا تهیهی یک فایل nuspec و تغییر مداوم جزئیات آن، به ازای هر نگارش جدید پروژه. در ادامه قصد داریم روش خودکار سازی این تغییرات را بررسی کنیم.
الف) تهیه فایل nuspec
NuGet قابلیت پذیرش متغیرهای خود تکمیل شوندهای را نیز دارد. فایل nuspec یا جزئیات بستهی تولیدی نیوگت، در این حالت یک چنین شکلی را پیدا میکند:
برای مثال اگر پروژهی ما TestNuget نام دارد، فایلی به نام TestNuget.nuspec را با محتویات فوق برای آن تهیه خواهیم کرد. همانطور که مشاهده میکنید، در این فایل ویژه، هیچکدام از اطلاعات شماره نگارش پروژه، نام نویسنده و غیره، از پیش تعیین نشدهاند. این اطلاعات، از فایل AssemblyInfo.cs پروژه، به صورت خودکار دریافت خواهند شد و نکتهی مهم آن، قرار گرفتن این فایل nuspec در پوشهی اصلی پروژه است. از این جهت که برای کامپایل آن و تبدیل به یک بستهی نیوگت، فایل nuget.exe را بر روی فایل پروژهی اصلی برنامه اجرا خواهیم کرد و نه بر روی این فایل nuspec.
بنابراین تکمیل اطلاعات فایل AssemblyInfo.cs را فراموش نکنید. برای مثال اطلاعات AssemblyCompany آن، در قسمت authors فایل فوق جایگزین میشود.
ب) تهیه فایل NuGet.exe
فایل NuGet.exe را جهت کامپایل فایل فرضی TestNuget.nuspec نیاز داریم. میتوان آنرا از سایت کدپلکس تهیه کرد و یا تنها کافی است بر روی Solution موجود در VS.NET کلیک راست کرده و گزینهی Enable NuGet Package Restrore را انتخاب کنیم. با اینکار به صورت خودکار پوشهی ویژهای به نام .nuget به همراه فایل NuGet.exe ایجاد میشود.
ج) کامپایل فایل nuspec
در همان پوشهی جدید .nuget، یک فایل bat را با محتوای ذیل تهیه کنید:
در این مثال، مسیر TestNuGet\TestNuGet.csproj به محل قرارگیری فایل پروژهی برنامه اشاره میکند. در اینجا فایل nuget.exe را بر روی فایل csproj برنامه اجرا خواهیم کرد. با توجه به اینکه قرار است یک بستهی عمومی منتشر شود، بهتر است تنظیمات تولید بستهی نیوگت را بر روی حالت release قرار داد که در این دستور، قید شدهاست.
در ادامه برای اینکه امکان آزمایش محلی این بسته را نیز داشته باشیم، فایل بستهی تولیدی، به کش محلی نیوگت، در سیستم جاری کپی میشود.
نکتهی جالب این روش، تهیهی قسمت dependencies پروژه، به صورت خودکار است:
اطلاعاتی را که در اینجا مشاهده میکنید، حاصل کامپایل فایل nuspec معرفی شدهی در ابتدای بحث است (با اجرای فایل bat تهیه شده) که یک کپی از آن در فایل TestNuget.1.0.0.0.nupkg نهایی نیز قرار میگیرد. به این ترتیب دیگر نیازی نیست تا این قسمت را به صورت دستی معرفی و هر بار با به روز رسانی وابستگیهای پروژه، شماره نگارشهای آنها را نیز به روز کرد. اطلاعات version به صورت خودکار از پروژهی جاری استخراج میشوند.
د) آزمایش محلی بستهی جدید
اکنون که فایل TestNuget.1.0.0.0.nupkg تولیدی را در آدرس localappdata%\NuGet\Cache% نیز کپی کردهایم، به منوی Tools/Options مراجعه و در قسمت NuGet Package Manager آن، به قسمت Package sources، این آدرس کش محلی را نیز معرفی کنید:
به این ترتیب، بدون ارسال یک بسته به سایت اصلی نیوگت، میتوان بسته را از کش محلی نیوگت نصب و آزمایش کرد:
فایلهای ذکر شده در مطلب فوق را از اینجا میتوانید دریافت کنید:
TestNuget.zip
الف) تهیه فایل nuspec
NuGet قابلیت پذیرش متغیرهای خود تکمیل شوندهای را نیز دارد. فایل nuspec یا جزئیات بستهی تولیدی نیوگت، در این حالت یک چنین شکلی را پیدا میکند:
<?xml version="1.0"?> <package > <metadata> <id>$id$</id> <version>$version$</version> <title>$title$</title> <authors>$author$</authors> <owners>$author$</owners> <licenseUrl>https://site.com/prj/LICENSE</licenseUrl> <projectUrl>https://site.com/prj</projectUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>$description$</description> <copyright>Copyright 2015 My Name</copyright> </metadata> </package>
بنابراین تکمیل اطلاعات فایل AssemblyInfo.cs را فراموش نکنید. برای مثال اطلاعات AssemblyCompany آن، در قسمت authors فایل فوق جایگزین میشود.
ب) تهیه فایل NuGet.exe
فایل NuGet.exe را جهت کامپایل فایل فرضی TestNuget.nuspec نیاز داریم. میتوان آنرا از سایت کدپلکس تهیه کرد و یا تنها کافی است بر روی Solution موجود در VS.NET کلیک راست کرده و گزینهی Enable NuGet Package Restrore را انتخاب کنیم. با اینکار به صورت خودکار پوشهی ویژهای به نام .nuget به همراه فایل NuGet.exe ایجاد میشود.
ج) کامپایل فایل nuspec
در همان پوشهی جدید .nuget، یک فایل bat را با محتوای ذیل تهیه کنید:
"%~dp0NuGet.exe" pack "..\TestNuGet\TestNuGet.csproj" -Prop Configuration=Release copy "%~dp0*.nupkg" "%localappdata%\NuGet\Cache" pause
در ادامه برای اینکه امکان آزمایش محلی این بسته را نیز داشته باشیم، فایل بستهی تولیدی، به کش محلی نیوگت، در سیستم جاری کپی میشود.
نکتهی جالب این روش، تهیهی قسمت dependencies پروژه، به صورت خودکار است:
<?xml version="1.0"?> <package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd"> <metadata> <id>TestNuget</id> <version>1.0.0.0</version> <title>TestNuget</title> <authors>Vahid N.</authors> <owners>Vahid N.</owners> <licenseUrl>https://site.com/prj/LICENSE</licenseUrl> <projectUrl>https://site.com/prj</projectUrl> <requireLicenseAcceptance>false</requireLicenseAcceptance> <description>This is a test.</description> <copyright>Copyright 2015 My Name</copyright> <dependencies> <dependency id="EntityFramework" version="6.1.2" /> </dependencies> </metadata> </package>
د) آزمایش محلی بستهی جدید
اکنون که فایل TestNuget.1.0.0.0.nupkg تولیدی را در آدرس localappdata%\NuGet\Cache% نیز کپی کردهایم، به منوی Tools/Options مراجعه و در قسمت NuGet Package Manager آن، به قسمت Package sources، این آدرس کش محلی را نیز معرفی کنید:
به این ترتیب، بدون ارسال یک بسته به سایت اصلی نیوگت، میتوان بسته را از کش محلی نیوگت نصب و آزمایش کرد:
فایلهای ذکر شده در مطلب فوق را از اینجا میتوانید دریافت کنید:
TestNuget.zip