زمانیکه شما یک برنامهی دات نتی نوشته شده به زبان سی شارپ را کامپایل میکنید، دو پوشهی bin و obj را مشاهده میکنید. در این مطلب، اهمیت و تفاوت این دو پوشه را بررسی میکنیم. این پوشهها حاوی کدهای کامپایل شدهی IL میباشند.
فرآیند کامپایل به دو مرحلهی کامپایل سورس کد و همچنین ایجاد پیوند (linking) بین فایلهای کامپایل شده تقسیم میشود.
به دیاگرام زیر دقت نمائید:
• در مرحلهی کامپایل، هر یک از سورس فایلها، بصورت مجزا کامپایل میشود و به ازای هر سورس فایل، یک فایل مجزای کامپایل شده تولید میشود. بدین معنا که اگر دو فایل داشته باشیم، دو کد مستقل کامپایل شده نیز تولید میشوند.
• در مرحلهی متصل کردن (linking)، همهی فایلهای کامپایل شده به یک اسمبلی واحد کامپایل میشوند که این اسمبلی میتواند از نوع DLL و یا EXE باشد.
اگر هر دو پوشه را مقایسه کنید، تعداد فایلهای موجود در obj، بیشتر از bin است؛ به این خاطر که در این پوشه برای هر فایل، یک فایل کامپایل شدهی مجزا تولید میشود.
اما سؤالی که در ذهن ایجاد میشود این است که چرا این فرآیند در دو مرحله انجام میشود و چرا فرآیند کامپایل در یک مرحله انجام نمیشود. با انجام 2 مرحلهای فرآیند کامپایل، میتوان از قابلیت کامپایل شرطی (Conditional Compiling) بهرهمند شد.
زمانیکه یک پروژهی بزرگ را کامپایل میکنیم، انتظار داریم تنها فایلهایی را که تغییر کردهاند، کامپایل شوند و در پوشهی obj، ما هر فایل کامپایل شده را بصورت مجزا داریم. در نتیجه میتوانیم تشخیص دهیم که چه فایلهایی تغییر کردهاند و تنها آنها را کامپایل میکنیم که این کار باعث افزایش سرعت فرآیند کامپایل میشود.
بطور خلاصه در پوشهی obj، ما به ازای هر سورس فایل، یک فایل کامپایل شده داریم؛ اما در پوشهی bin تنها یک فایل یکپارچه شده را خواهیم داشت.