در مقاله قبلی بحث Assembly Linker را باز کردیم و یاد گرفتیم که چگونه میتوان با استفاده از آن ماژولهای مختلف را به یک اسمبلی اضافه کرد. در این قسمت از این سلسله مقالات قصد داریم فایلهای منابع (Resource) مانند مواد چندرسانهای، چند زبانه و .. را به آن اضافه کنیم. یک اسمبلی حتی میتواند تنها Resource باشد.
...
در قسمت قبلی نحوهی ساخت اسمبلی را یاد گرفتیم. ولی ممکن است که بخواهید اسمبلی را از طریق Assembly Linker یا AL.exe ایجاد کنید. این روش موقعی سودمند است که بخواهید یک اسمبلی از ماژولها از کامپایلرهای مختلف را ایجاد کنید یا اینکه کامپایلر شما مانند کامپایلر سی شارپ از دستور یا سوئیچی مشابه addmodule استفاده نمیکند. یا حتی اینکه در زمان کامپایل هنوز اطلاعاتی از نیازمندیهای اسمبلیها ندارید و به بعد موکول میکنید. از AL همچنین میتوانید ...
در ادامه قسمت قبلی روشهای زیادی جهت اضافه شدن یک ماژول به یک اسمبلی وجود دارند. اگر شما از کامپایلر سیشارپ برای ساخت یک فایل PE با جدول مانیفست استفاده میکنید، میتوانید از سوئیچ AddModule/ استفاده کنید. برای اینکه بدانیم چگونه میتوان یک اسمبلی چند فایله ساخت بیاید فرض کنیم که دو فایل سورس کد با مشخصات زیر داریم: RUT.cs: این سورس شامل کدهایی است که به ندرت در برنامه استفاده میشود. FUT.cs: این سورس شامل کدهایی است که ...
ترکیب ماژولها به قالب یک اسمبلی فایل
Program.exe یک فایل PE با جداول متادیتا است که همچنین یک اسمبلی هم
میباشد. یک اسمبلی مجموعهای از یک یا چند فایل، شامل تعاریف نوع و منابع
(ریسورس) میباشد و یکی از فایلهای اسمبلی، برای نگهداری manifest انتخاب
میشود. این جدول مجموعهای است از جداول متادیتا که به طور کلی شامل نام فایلهایی است که قسمتی از اسمبلی را تشکیل میدهند. برای همین گفتیم که CLR با
اسمبلیها کار میکند. اب ...
متادیتاها شامل بلوکی از دادههای باینری هستند که شامل چندین جدول شده و جدولها نیز به سه دسته تقسیم میشوند: جداول تعاریف Definition Table جداول ارجاع References Table جداول manifest
جداول تعریف
جدول زیر تعدادی از جداول تعریفها را توضیح میدهد: ModuleDef شامل آدرس یا مدخلی است که ماژول در آن تعریف شده است. این آدرس شامل نام ماژول به همراه پسوند آن است؛ بدون ذکر مسیر. در صورتی که کام ...
انتشار نوعها (Types) به یک ماژول
در این قسمت به نحوهی تبدیل سورس به یک فایل قابل انتشار میپردازیم. کد زیر را به عنوان مثال در نظر بگیرید: public sealed class Program {
public static void Main() {
System.Console.WriteLine("Hi");
}
}
این کد یک ارجاع به نام کنسول دارد که این ارجاع، داخل فایلی به نام mscorlib.dll قرار دارد. پس برنامهی ما نوعی را دارد، که آن نوع توسط شرکت ...
در سلسله مقالات قبلی ما فصل اول از بخش اول را به پایان بردیم و مبحث آشنایی با CLR و نحوهی اجرای برنامه را یاد گرفتیم. در این سلسله مقالات که مربوط به فصل دوم از بخش اول است، در مورد نحوهی ساخت و توزیع برنامه صحبت میکنیم.
در طی این سالها ویندوز به ناپایداری و پپیچیدگی متهم شده است. صرف نظر از این که ویندوز شایستگی این اتهامات را دارد یاخیر، این اتهامات نتیجهی چند عامل است: اول از همه برنامهها از dll هایی ...
net framework. شامل Framework
Class Library یا به اختصار FCL است. FCL مجموعهای از dll اسمبلیهایی است که صدها و هزاران نوع در آن تعریف شدهاند و هر نوع تعدادی کار انجام
میدهد. همچنین مایکروسافت کتابخانههای اضافهتری را چون azure و Directx نیز ارائه کرده است که باز هر کدام شامل نوعهای زیادی میشوند. این
کتابخانه به طور شگفت آوری باعث سرعت و راحتی توسعه دهندگان در زمینه
فناوریهای مایکروسافت گشته است.
...
در قسمت پنجم در مورد ابزار Ngen کمی صحبت کردیم و در این قسمت هم در مورد آن صحبت هایی خواهیم کرد. گفتیم که این ابزار در زمان نصب، اسمبلیها را کامپایل میکند تا در زمان اجرا JIT وقتی برای آن نگذارد. این کار دو مزیت به همراه دارد: بهینه سازی زمان آغاز به کار برنامه کاهش صفحات کاری برنامه: از آنجا که برنامه از قبل کامپایل شده، فراهم کردن صفحه بندی از ابتدای کار امر چندان دشواری نخواهد بود؛ لذا در این حالت صفحه بندی حافظه به صورت پوی ...
کدهای IL و تایید آن ها ساختار استکی
IL از ساختار استک استفاده میکند. به این معنی که تمامی دستور العملها داخل آن push شده و نتیجهی اجرای آنها pop میشوند. از آنجا که IL به طور مستقیم ارتباطی با ثباتها ندارد، ایجاد زبانهای برنامه نویسی جدید بر اساس CLR بسیار راحتتر هست و عمل کامپایل، تبدیل کردن به کدهای IL میباشد. بدون نوع بودن(Typeless )
...