نصب Mono
برای شروع کار در ویندوز، باید نسخه مخصوص ویندوز MONO را دانلود و نصب نمایید. پس از دریافت فایل Mono Installer for Windows آن را اجرا کنید و پروسه نصب را پی بگیرید. توجه داشته باشید که Mono هیچ تداخلی با Microsoft.NET یا MS Visual Studio از قبل نصب شده نخواهد داشت.
در زمان تهیه این مقاله، بهترین و آخرین نسخه عرضه شده مونو، 1.15 است. اگر بعد از نصب به دایرکتوری این نسخه از مونو مراجعه کنید، با تعداد زیادی از زیر پوشهها از جمله etc ،contrib ،man ،share و ... مواجه خواهید شد. (که برای کاربران لینوکس آشناست) (شکل 1). شکل 1 ساختار پوشه مونو را نشان میدهد.
در این مقاله فقط با فولدرهای bin/ (که حاوی بسیاری از ابزارهای مونو از جمله کامپایلر #C)،
Global Asscmbly Cache: GAC lib\mono\gac چارچوب کاری مونو) سروکار خواهیم داشت.
چون اکثر ابزارهای مونو را از دایرکتوری bin\ و از طریق خط فرمان اجرا خواهید کرد، لذا بهتر است آدرس آن را به متغیر محیطی Path سیستمعامل خود اضافه کنید. برای سهولت در کار، میتوانید از خط فرمان MONO استفاده کنید. این ابزار میتواند به طور خودکار ابزارهای خط فرمانی را شناسایی کند وآنها را به کار گیرد. آدرس این کنسول: Start>All Program >Mono For Windows> Applications حال برای اطمینان از صحت نصب، فرمان زیر را وارد کنید:
mono-- version
اگر همه کارها به درستی انجام شده باشد، جزئیات بسیاری مطابق آنچه در تصویر شماره 2 نشان داده شده است، نمایش داده خواهد شد.
شکل 2 |
فهرست 1 |
کار با کامپایلرهای #C
mcs.exe اولین #C بود که برای پروژه مونو در نظر گرفته شد. این کامپایلر با 1.1#C مطابقت کامل دارد (در حقیقتmcs.exe با #C نوشته شده است) و همانند کامپایلر خط فرمان مایکروسافت یعنی (csc.exe) از response fileها پشتیبانی میکند. یعنی که میتوانید با اضافه کردن فلگهای /target ،/out ،/reference و ... به ترتیب نوع اسمبلی، نام اسمبلی کامپایل شده و وابستگیهای خارجی فهرست اسمبلی را برای کامپایلر تعیین کنید. میتوانید تمام آپشنهای قابل استفاده در mcs.exe را با دستور زیر مرور کنید:
؟- mcs.exe
gmcs.exe یا(genericmcs.exe) نسخهای از mcs.exe است که از #C مخصوص NET 2.0 و ارجاعهای کتابخانههای پایهای کلاس مبتنی بر NET 2.0 پشتیبانی میکند. در حقیقت تفاوت این دو کامپایلر در اینجاست که mcs.exe به طور خودکار به Base Class Libraryهای مبتنی بر NET 1.1 مراجعه میکند، در صورتی که gmcs.exe به طور پیشفرض از Base Class Libraryهای مبتنی بر NET 2.0 به عنوان مرجع استفاده مینماید. با این حساب،gmcs.exe در آینده کامپایلر پیشفرض مونو خواهد شد و mcs.exe از دور خارج خواهد گردید.
ایجاد یک Code Library داتنت با Mono
برای آشنایی با مونو در عمل، از ایجاد یک کتابخانه که با نام Core LibDump.dll شروع میکنیم. این اسمبلی حاوی یک نوعِ تک کلاسه با نام CoreLib Dumper و دارای یک متد استاتیک با نام DumpTypeTo File است. این متد یک رشته که معرف یک نام معتبر از یک Type موجود درون mscorlib.dll را میگیرد و اطلاعات مرتبط با آن Type را به یک فایل محلی در هارددیسک منتقل میکند که کامل این برنامه در فهرست 1 آمده است. برای مثال، اگر پارامتر رشتهای ورودی به این متد System.Threading.Thread باشد، فایل خروجی System.Threading.Thread.txt نام خواهد داشت. با اینکه میتوانید این برنامه را با واردکردن آرگومانهای تعریفی به صورت مجزا کامپایل کنید، اینکار با استفاده از فایلهای response سادهتر و راحتتر انجام میپذیرد. برای این کار، فایلی را با نامCorelibDumper.rsp در کنار فایل CoreLibDumper.cs ایجاد نمایید و مجموعه فرامین زیر را در آن وارد کنید:
target: library/
out: CorelibDumper.dll/
CoreLibDumper.cs
حال میتوانید کتابخانه مذکور را با دستور زیر کامپایل کنید:
gmcs @corelibDumper.rsp
البته بدون فایلهای rsp.* باید کامپایل را اینگونه انجام میدادید:
gmcs/target: library out:Corelib/.Dumper.dll
Corelib Dumper.cs
تخصیص یک نام قوی به CoreLib Dumper.dll
مونو از ایجاد اسمبلیهای نام قوی و به اشتراکگذاری شده در Global Assembly Cache) GAC) نیز پشتیبانی میکند. یعنی میتوان کتابخانهای را که ایجاد کردهاید، در GAC به صورت فراگیر به اشتراک بگذارید. برای ایجاد دادههای کلیدی public/private، مونو از sn.exe (که کم و بیش مثل محصول مایکروسافتی هم نام خود عمل میکند) استفاده مینماید. برای مثال، دستور زیر یک فایل snk.* ایجاد میکند: (برای کسب اطلاعات بیشتر از فلگ ؟ - در پایان فرمان استفاده کنید).
sn/ k myTest KeyPair.snk
حال برای اینکه به #C بگوییم از این کلید ایجادشده برای تخصیص یک نام قوی به کتابخانه CoreLibDumper.dll استفاده کند، باید فایل CoreLibDumper.rsp را به صورت زیر درآورید:
target: library/
out: CoreLibDumper.dll/
Keyfile: myTest KeyPair.snk/
CoreLibDumper.cs
حال با فرمان زیر، کتابخانه خود را دوباره کامپایل میکنیم:
gmcs @corelibDumper.rsp
مشاهده فهرست بروزرسانیشده با monodis.exe
قبل از قرار دادن اسمبلی در GAC، در مورد monodis.exe (که عملکردی مشابه ildasm.exe مایکروسافت دارد) بدانید که میتوانید با استفاده از آن، کُد CIL، فهرست کلی و انواع metadata برای یک اسمبلی مشخص را مشاهده کنید.
مثلاً میخواهیم اطلاعات مربوط به اسمبلی نام قویِ جدیدی که ایجاد کردهایم را با سوییچ assembly مشاهده کنیم. شکل 3 پاسخ به دستور زیر را نشان میدهد:
monodis-- assembly CoreLibDumper.dll
همانطور که میبینید، فهرست کلی اسمبلی، حاوی کلیدی که در myTest keypair.snk ایجاد کردیم نیز میباشد.
شکل 3 |
شکل 4 |
فهرست 2 |
شکل 5 |
ایجاد یک برنامه کاربردی بر مبنای فرمهای ویندوز
قبل از ادامه کار، DontuseCoteLibDumper.dll را به همان نام قبلی یا CoreLibDumper.dll تغییر نام دهید. سپس یک فایل جدید #C ایجاد نمایید و آن را WinFormsClientApp.cs بنامید.
در این فایل دو type با استفاده از قابلیتهای 2.0 #C تعریف شده و چند کلاس ایستا به همراه متدهای ناشناس به کار رفتهاند که در فهرست 3 موجود است.
فهرست 3 |
شکل 6 |
جمعبندی
تا اینجا چیز جدیدی در مورد NET. یا #C مطرح نشد و تأکید ما در این مقاله طرز شروع کار با مونو بود. با اینکه در طی این مقاله چند برنامه کاربردی ساده با مونو ایجاد کردیم، اما اهمیت مونو در جایی واضحتر میشود که به شکل 7 دقت کنید. این تصویر همان برنامه مبتنی بر Windows Forms را در حال اجرا در لینوکس Suse نمایش میدهد.
شکل 7 |
شکل 8 |
ایا مونو قادر است فایل های باینری ایجاد شده توسط ویژوال استدیو را اجرا نماید ؟
بله مونو می تواند این فایل های باینری را بدون کامپایل مجدد اجرا نماید . برای بررسی اینکه ایا مونو توانایی اجرای برنامه که شما توسط ویژوال استدیو نوشته اید را دارد یا خیر می توانید از برنامه Mono Migration analysis استفاده نمایید .
در حال حاظر API های مونو در محدوده .NET 1.1 و .NET2.0 قرار دارند .
پروژه مونو دقیقا چیست ؟
پروژه مونو یک عمل ابتکاری توسعه ازاد است که توسط Novell برای توسعه یک منبع ازاد پشتیبانی می شود . و مونو در واقع ورژن UNIX دات نت مایکروسافت است و هدف ان وادار ساختن توسعه دهندگان UNIX به پشتیبانی و ساخت برنامه های قابل اجرا در سکوی .NET می باشد . این پروژه تکنولوژی های مختلف توسعه یافته توسط مایکروسافت را پیاده سازی می کند که هم اکنون به منظور استاندار سازی تحویل ECMA داده شده اند .
پروژه مونو توجه زیادی را به مولفه ها کتابخانه ها و برنامه های مبتنی بر C# کرده است که مهم ترین انها که توسط تیم مونو توسعه یافته اند را در این صفحه مشاهده می کنید . لیست کامل Libraries و Software
چه تفاوتی بین مونو و ابتکار .net وجود دارد ؟
ابتکار .Net تا حدی یک اقدام شرکتی از جانب مایکروسافت است که بخشی از ان چارچوب توسعه سکوی متقابل است . مونو یک پیاده سازی این چارچوب توسعه است اما نه پیاده سازی هر چیز دیگری که وابسته به ابتکار .NET دارد مثل پسورد یا software-as-a-service.
چه تکنولوژی هایی در مونو بکار رفته است ؟
مونو شامل شماری از مولفه های مفید برای ساخت نرم افزار های جدید است
1) یک زیر ساخت زبان مشترک ( CLI ) ماشین مجازی که شامل کلاس لودر و کامپایلر زمان اجرا و مجموعه جمع اوری حافظه هرز است .
2) یک کتابخانه کلاس که می تواند با هر زبانی که در CLR عمل می کند کار کند که کتابخانه های سازگار با .Net و کتابخانه های فراهم شده همراه مونو شامل این مورد می شوند .
3) کامپایلری برای زبان C# .
CLR و سیستم CTS نوشته شدن برنامه های کاربردی و کتابخانه ها را در مجموعه ای از زبان های مختلف که کدبایت را هدف قرار می دهند ممکن می سازد این بدان معنا است که به عنوان مثال اگر شما کلاسی را برای دستکاری جبری در C# تعریف کنید ان کلاس می تواند مجددا توسط هر زبان دیگری که CLR را پشتیبانی می کند بکار رود .
از کجا می توان مشخصات این تکنولوژی ها را بدست اورد ؟
در ادرس های زیر شما به مطالب بیشتری دست می یباید
C# : http://www.ecma-international.org/publications/standards/Ecma-334.htm
CLI : http://www.ecma-international.org/publications/standards/Ecma-335.htm
آدرس منبع:
مونو که زاده افکار برنامه نویس برجسته متن باز، میگل دوایکازا و مدیر برنامه نویسی ناول است، بگونه ای طراحی شده است که برنامه نویسان را قادر به نوشتن برنامه هایی در چارچوب .Net میکند که در لینوکس، ویندوز، سولاریس و سایر سیستمها عامل اجرا میشوند.
مونو حاوی یک کامپایلر C شارپ، توابع .Net و دو پشته از API (توابع رابط برنامه ها و سیستم عامل) است. پشته اول برای بکارگیری امکانات لینوکس بکار میرود و دیگری برای سازگاری با چارچوب .Net ازقبیل ADO.Net و ASP.Net میباشد. مونو حتی امکان استفاده از اجزای دات نت بعنوان یک سیستم اجرایی قابل استفاده در کنار فایلهای اصلی را دارد. این سیستم کامپایل همزمان (JIT) و پیش کامپایل (Pre-Compile) را نیز دراختیار برنامه نویسان میگذارد.
برنامه نویسان این پروژه تمام تلاش خود را کردند که وابستگی زیادی به استاندارد قابل تغییر میکروسافت نداشته باشند و پروژه را براساس استانداردهای CLI و C# متعلق به ECMA طراحی کردند.
درحالیکه بنظر میرسید مونو فقط C# را به لینوکس می آورد اما اکنون از VisualBasic ، Python ، Jscript و به کمک iKVM جاوا نیز پشتیبانی میکند.
مونو تحت پوشش تعدادی از مجوزهای متن باز است. کامپایلر C# تحت GNU GPL و توابع تحت مجوز GPL برای کتابخانه ها و کتابخانه های کلاس تحت MIT X11 میباشند.
ایکازا میگوید:"همچنان که لینوکس بعنوان یک سیستم عامل رومیزی رشد میکند نوشتن نرم افزاربرای این محیط مشکلتر میشود زیرا ابزارهای برنامه نویسی موجود بسیار تخصصی و پیچیده هستند. مونو محیط برنامه نویسی بسیار مفید و کارآ برای لینوکسهای رومیزی و سرور است. مونو براساس استانداردها، زبانهای برنامه نویسی و کتابخانه های تایید شده بنا نهاده شده است. قابلیتهای چند سیستم عاملی مونو تا ویندوز، مکینتاش و گونه های مختلف یونیکس گسترده شده است."
برای راحتی بیشتر برنامه نویسان سایت جدیدی با آدرس http://www.mono-project.com در زمینه ابزار، منابع، مسیرهای پروژه و جزییات مونو راه اندازی شده است. مونو از این سایت قابل دریافت است. مونو یک محصول آزمایشگاهی نیست. ناول هم اکنون از مونو برای برنامه نویسی پروژه های iFolder و ZENworks استفاده میکند.
آدرس منبع
http://www.eweek.com/article2/0,1759,1619046,00.asp?kc=EWRSS03129TX1K0000616