PDA

View Full Version : مقاله: کامپایل پروژه بدون Visual Studio و با استفاده از MSBuild



SMRAH1
دوشنبه 07 دی 1388, 18:39 عصر
(می توانید متن این مقاله را به PDF و همچنین یک نمونه کد را در ضمیمه این پست دانلود کنید).

کامپایل پروژه بدون Visual Studio:
شاید تاکنون برایتان پیش آمده باشد که برای کامپایل فقط یک پروژه تحت VS2005 یا VS2008،مجبور به نصب کامل Visual Studio شده اید.برای مثال هنگامی که برنامه را در سیستم کارفرما راه اندازی کرده اید متوجه مشکل کوچکی (مثلا صحیح نبودن عنوان یکی از فرم ها یا ..) شده اید که به راحتی و در عرض چند دقیقه می توان کد را ویرایش کرد ولی باید با VS کامپایل کنید!در این هنگام چکار کرده اید؟حتما یا بدنبال یک سیستم که Visual Studio داشته باشد بوده اید یا روی یک سیستم VS را نصب کرده اید یا پروژه را به شرکتتان برده و دوباره کامپایل کرده اید و به پیش کارفرما بازگشته اید!
اما نه لازم نیست این کار را بکنید!راه حل در دستان شماست.شما می توانید یک پروژه تحت Visual Studio را بدون داشتن Visual Studio کامپایل کنید! راه حل MSBuild است.
در مورد csc یا vbc و یا jsc نمی خواهیم صحبت کنیم.در مورد کامپایل یک یا چند فایل نمی خواهیم صحبت کنیم.می خواهیم از کامپایل یک پروژه (sln یا csproj یا vbproj) حرف بزنیم.

MSBuild چیست؟
The Microsoft Build Engine یا همان MSBuild،پلتفرم مایکروسافت برای ساخت نرم افزار است (شبیه ساختار و دستور make در کامپایلرهای هماهنگ با UNIX).در واقع این پلتفرم با ایجاد یک ساختار استاندارد اجازه کامپایل و ساخت یک نرم افزار را با/بدون ویژوال استودیو به ما می دهد.
به کار بردن کلمه MSBuild دارای دو مفهوم است:
1) به مفهوم ساختار فایلی که اطلاعات ساخت برنامه در آن موجود است.مثالی از آن همان فایلهای معروف با پسوند csproj و vbproj است که حتما در پروژه های خود دیده اید(هر دو دارای ساختار های مشابه هستند).در واقع این دو فایل از ساختاری از نوع XML-Base برای معرفی پروژه استفاده می کنند که به نام MSBuild شناخته می شود.نحوه معرفی و شناخت اطلاعات و اجزای (element) این فایل را می توانید به طور مفصل در MSDN بیابید.
2) موتور سازنده که فایل MSBuild.exe است و وظیفه آن تفسیر ساختار فایل بالا و ایجاد برنامه است.


MSBuild را چگونه تهیه کنیم؟
اگر Microsoft .NET Framework نسخه 2 به بالا بر روی سیستم شما نصب است،شما دیگر نیازی به تهیه آن ندارید بلکه روی سیستمتان موجود است.در واقع MSBuild قسمتی از دات نت است و برای تهیه آن نیاز به پراخت هیچ هزینه ای نیستید.MSbuild در دو نسخه 2 و 3.5 موجود است.برای شناسایی آن می توانید به مسیر زیر بروید :



%windir%\Microsoft.NET\Framework

در این پوشه،اطلاعات هر کدام از .NET ها موجود است.مثلا در پوشه v2.0.50727 اطلاعات دات نت 2،پوشه v3.0 برای دات نت 3 و v3.5 برای دات نت 3.5.درون هر یک از پوشه هایv2.0.50727 و v3.5 شما می توانید یک نسخه MSBuild.exe را ملاحظه کنید (ساختار پوشه v3.0 کاملا متفاوت است).هر کدام از آنها برای یک نسخه VS مناسب هستند.اگر پروژه شما با VS2005 نوشته شده است،می توانید با هر دو نسخه MSBuild کامپایل کنید ولی اگر برنامه شما با VS2008 نوشته شده است،فقط با MSBuild نسخه v3.5 می توانید کامپایل کنید.توجه کنید که مهم نیست دات نت هدف پروژه چیست(ممکن است با VS2008 نوشته شده ولی برای دات نت 2 آماده گردیده است)،بلکه مهم محیط توسعه استفاده شده برای تولید پروژه است.

نحوه اجرای MSBuild:
برای اجرای این برنامه می توانید از خط دستوری شبیه زیر استفاده کنید:



MSBuild.exe [Switches] [ProjectFile]

البته می توانید جای سوئیچ ها و فایل پروژه را عوض کنید.سوئیچ ها را بطور مجزا توضیح خواهم داد ولی در مورد فایل پروژه باید یک نکته را یادآوری کنم.این فایل می تواند فایل sln پروژه یا فایل proj پروژه (همان csproj و یا vbproj) باشدالبته شما می توانید حتی فایل های proj جدید نیز تولید کنید (گفته شد که ساختار این فایل های همان ساختار MSBuild است که در بالا نام برده شد).
برای نمونه خطوط زیر،روش های بکار بردن این دستور است.در خط زیر،پروژه ای به نام MyProj.proj کامپایل می شود (البته با تنظیمات Debug آن):



MSBuild.exe MyProj.proj /property:Configuration=Debug

در خط زیر همان پروژه rebuild می شود (تنظیماتی که به عنوان پیشفرض در نظر گرفته اید مد نظر خواهد بود که معمولا حالت Debug است).



MSBuild.exe MyProject.proj /t:rebuild

شما می تواندی حتی دستورات پیچیده تر و یا انتخاب یک پروژه خاص را مد نظر قرار دهید.مثلا فرض کنید که یک پروژه اصلی MyProject دارید (MyProject solution) که خود دارای دو زیر پروژه MyProject1 در پوشه اصلی و MyProject2 در زیر پوشه MyProject2Folder از پوشه اصلی است. دستور زیر درخواست ساخت مجدد MyProject1 و سپس پاکسازی MyProject2 را می نماید (ممکن است در تنظیمات MyProject1 به صورت خودکار نیاز به کامپایل MyProject2 باشد که در آن صورت msbuild به صورت خودکار ابتدا msbuild را کامپایل کرده و سپس MyProject1 را کامپایل می کند).



msbuild MyProject.sln /t: MyProject1:Rebuild; MyProject2Folder\MyProject2:Clean

تنها نکته ای که باید یادآوری شود این است که ویندوز به صورت پیشفرض نمیداند که msbuild کجاست و باید در هنگام کامپایل آدرس دقیق آن را بنویسید یا در پوشه v2.0.50727 و یا v3.5 باشید (اگر MSBuild را خیلی استفاده می کنید می توانید آن را به PATH اضافه کنید).به عبارت دیگر در هنگام نوشتن دستور به صورت زیر عمل کنید (برای کامپایل با نسخه 3.5):



%windir%\Microsoft.NET\Framework\v3.5\msbuild.exe MyProject.proj /t:rebuild


سوئیچ های MSBuild:
سوئیچ ها در هنگام کامپایل،برای ایجاد هدف ما بکار می روند تا بیشترین انعطاف پذیری را ایجاد کنند.هر سوپیج با حرف یا حروفی شناخته شده و ممکن است دارای پارامتر باشد.برای نوشتن یک سوئیچ در msbuild باید نکات زیر را دقت کنید:
* هر سوئیچ با اسلش («/») شروع شده و سپس حرف یا حروف معرف سوئیچ می آیند.تنها استثنا مربوط به سوئیچ file است که با «@» بکار می رود.
* چنانچه سوئیچ پارامتر داشته باشد،بلافاصله بعد از سوئیچ یک علامت «:» گذاشته و پارامتر آن را می آوریم
* چنانچه سوئیچ دارای چند پارامتر باشد،هر پارامتر را با یک «;» از قبلی جدا می کنیم.
توضیح اینکه در هنگام معرفی سوئیچ ها در این متن،فقط حروف را بکار برده و علامت اسلش یا «@» قبل از آن را نمی نویسیم.همچنین هر سوئیچ ممکن است دارای اشکال مختلف باشد (معمولا دارای یک نام بلند است و یک نام کوتاه).
برای نمونه سوئیچ version به صورت زیر برکار می رود:



MSBuild /version

یا سوئیچ t یا پارمتر Build به شکل زیر:



MSBuild MyProject.proj /t:Build

و یا سوئیچ t با دو پارامتر (به ترتیب) Clean و Build:



MSBuild MyProject.proj /t:Clean;Build


سوئیچ help یا h یا ?: این سوئیچ اطلاعات در مورد خط دستور برنامه به ما می دهد.این سوئیچ نیازی به فایل پروژه ندارد.
سوئیچ version یا ver : اطلاعاتی در مورد نسخهMSBuild در اختیارمان قرار می دهد.برای فراخوان این سوئیچ نیازی به فایل پروژه نیست.
سوئیچ file : این سوئیچ ،تنها سوئیچی است که با @ فراخوانی می شود و وظیفه آن معرفی فایل حاوی دستورات (MSBuild Response Files) است.در واقع شما می توانید هر سوئیچ معرفی شده در این توضیحات را در این فایل (که معمولا با پسوند rsp نام گذاری می شود) قرار داده (همه را در یک خط یا هر سوئیچ را در یک خط جدا) و سپس با ارسال نام این فایل به MSBuild،تمام دستورات آن را اجرا می کند.مثلا به جای نوشتن دستور زیر:



msbuild A.sln /t:Rebuild;Clean /p:Configuration=Debug

شما می توانید یک فایل با نام


1.rsp
با محتویات زیر معرفی کرده:


/t:Rebuild
/t:Clean
/p:Configuration=Debug
و سپس بنویسید:



msbuild A.sln @file:1.rsp

جالب اینکه داخل یک فایل rsp ،می توانید یک یا چند فایل rsp دیگر را فراخوانی کنید.
در ضمن به شکل پیشفرض، MSBuild فایل MSBuild.rsp را ،که در کنار همان فایل MSBuild.exe قرار دارد، فراخوانی می کند (حتی زمانی که شما MSBuild را بدون خط دستور اجرا کنید!).شما می توانید سوئیچ های سفارشی (مثل nologo) را در این فایل قرار دهید تا با هربار اجرا،این دستور نیز اجرا شود.
سوئیچ nologo : با هر بار اجرای MSBuild ،برنامه چند خطی را در مورد خود توضیح می دهد.شما می توانید با افزودن این سوئیچ،از برنامه درخواست کنید که این چند خط توضیح را نمایش ندهد!
سوئیچ noautoresponse یا noautorsp : با افزودن این سوئیچ، MSBuildبه شکل اتوماتیک MSBuild.rsp را اجرا نمی کند (ار اجرای MSBuild.rsp صرف نظر می کند).
سوئیچ target یا t : در واقع هدف از قراخوانی را مشخص می کنید.اهداف Clean و Build و Rebuild مهمترین ها هستند که در پروژه های VS از پیش تعریف شده اند.در پروژه ی فراخوان شده،ممکن است اهداف دیگری هم تعریف شده باشند که در آن صورت می توان از آنها نیز استفاده کرد.
سوئیچ property یا p: می توانید مشخصات از پیش تعین شده پروژه را تغییر دهید.برای هر پارامتر باید به شکل:


name=value
عمل کنید که name عنوان مشخصه و value همان مقدار مد نظر است.مهمترین مشخصه مورد استفاده OutputDir است که مسیر خروجی (کامپایل) برنامه را نشان می دهد مثلا:



msbuild A.sln /p:OutputDir=bin\Debug

از دیگر مشخصه های مهم دیگر، Configuration است که نسخه درخواستی (مثلا Debug یا Release یا هر نسخه معرفی شده در فایل پروژه را می تواند در بر گیرد).چنانچه Configuration معرفی نشده باشد،نوع پیشفرض (معمولا Debug) را اجرا می کند (به مانند اینکه شما دکمه Build را در ویژوال استودیو بزنید).
سوئیچ noconsolelogger: پیغام های خروجی هنگام کامپایل که به خروجی Console ارسال می شود،متوقف می شود.
سوئیچ toolsversion یا tv : این سوئیچ فقط در نسخه v3.5 موجود است و نسخه کامپایلر را مشخص می کند. پارامتر های قابل قبول این سوئیچ 2.0، 3.0 و 3.5است.در واقع این سوئیچ می تواند پروژه ای را با پارامتر 2.0 کامپایل کند بطوریکه گویی با MSBuild 2.0 کامپایل شده است.

همچنین سوئیچ های دیگری هم در MSBuild موجود است که از حوصله این مقاله خارج است و در اینجا فقط به مهمترین های آن بسنده کردیم.

یک نمونه خط دستور برای کامپایل پروژه:
فرض کنید پروژه ای به نام test.csproj در مسیر C:\test موجود است.خط زیر برای کامپایل حالت پیشفرض (معمولا Debug) کافیست:



%windir%\Microsoft.NET\Framework\v3.5\msbuild.exe test.csproj


منابع بیشتر:
برای کسب اطلاعات بیشتر می توانید به لینک های زیر مراجعه کنید:


http://social.msdn.microsoft.com/Forums/en/msbuild/threads
http://msdn.microsoft.com/en-us/library/0k6kkbsd.aspx

http://msdn.microsoft.com/en-us/magazine/cc163589.aspx
http://channel9.msdn.com/wiki/msbuild/homepage/