در این قسمت به نحوهی تبدیل سورس به یک فایل قابل انتشار میپردازیم. کد زیر را به عنوان مثال در نظر بگیرید:
public sealed class Program { public static void Main() { System.Console.WriteLine("Hi"); } }
csc.exe /out:Program.exe /t:exe /r:MSCorLib.dll Program.cs
mscorlib یک فایل سورس است که شامل همهی نوعها، از قبیل int,string,byte و خیلی از نوعهای دیگر میشود. از آنجائیکه استفادهی از این نوعها به طور مکرر توسط برنامه نویسها صورت میگیرد، کمپایلر به طور خودکار این کتابخانه را به لیست ارجاعات اضافه میکند. به بیان دیگر خط بالا به شکل زیر هم قابل اجراست:
csc.exe /out:Program.exe /t:exe Program.cs
به علاوه از آنجایی که بقیهی سوئیچها هم مقدار پیش فرضی را دارند، خط زیر هم معادل خطوط بالاست:
csc.exe Program.cs
اگر به هر دلیلی دوست ندارید که سمت mscorlib ارجاعی صورت بگیرید، میتوانید از دستور زیر استفاده کنید:
/nostdlib
csc.exe /out:Program.exe /t:exe /nostdlib Program.cs
//CUI /t:exe //GUI /t:winexe //Winsows store App /t:appcontainerexe
/out:MyProject.exe /target:winexe
و برای در نظر گرفتن این سوئیچها فایل پاسخگو را به کامپایلر معرفی میکنیم:
csc.exe @MyProject.rsp CodeFile1.cs CodeFile2.cs
در صورتیکه چندین فایل پاسخگو که به آن فایلهای محلی local میگویند، معرفی کنید که دستورات آنها(سوئیچ) با دستورات داخل csc.rsp مقدار متفاوتی داشته باشند، فایلهای محلی الویت بالاتری نسبت به فایل global داشته و تنظمیات آنها روی فایل global رونوشت میگردند.
موقعیکه شما دات نت فریمورک را نصب میکنید، فایل csc.rsp را با تنظیمات پیش فرض در مسیر زیر نصب میکند:
%SystemRoot%\ Microsoft.NET\Framework(64)\vX.X.X
حروف x نمایانگر نسخهی دات نت فریمورکی هست که شما نصب کردهاید. آخرین ورژن از این فایل در زمان نگارش کتاب، شامل سوئیچهای زیر بوده است.
# This file contains commandline options that the C# # command line compiler (CSC) will process as part # of every compilation, unless the "/noconfig" option # is specified. # Reference the common Framework libraries /r:Accessibility.dll /r:Microsoft.CSharp.dll /r:System.Configuration.dll /r:System.Configuration.Install.dll /r:System.Core.dll /r:System.Data.dll /r:System.Data.DataSetExtensions.dll /r:System.Data.Linq.dll /r:System.Data.OracleClient.dll /r:System.Deployment.dll /r:System.Design.dll /r:System.DirectoryServices.dll /r:System.dll /r:System.Drawing.Design.dll /r:System.Drawing.dll /r:System.EnterpriseServices.dll /r:System.Management.dll /r:System.Messaging.dll /r:System.Runtime.Remoting.dll /r:System.Runtime.Serialization.dll /r:System.Runtime.Serialization.Formatters.Soap.dll /r:System.Security.dll /r:System.ServiceModel.dll /r:System.ServiceModel.Web.dll /r:System.ServiceProcess.dll /r:System.Transactions.dll /r:System.Web.dll /r:System.Web.Extensions.Design.dll /r:System.Web.Extensions.dll /r:System.Web.Mobile.dll /r:System.Web.RegularExpressions.dll /r:System.Web.Services.dll /r:System.Windows.Forms.Dll /r:System.Workflow.Activities.dll /r:System.Workflow.ComponentModel.dll /r:System.Workflow.Runtime.dll /r:System.Xml.dll /r:System.Xml.Linq.dll
البته ارجاع کردن به این اسمبلیها تا حد کمی باعث کند شدن صورت کامپایل میشوند؛ ولی تاثیری بر فایل نهایی و نحوهی اجرای آن نمیگذارند.
نکته: در صورتی که قصد ارجاعی را دارید، میتوانید آدرس مستقیم اسمبلی را هم ذکر کنید. ولی اگر تنها به نام اسمبلی اکتفا کنید، مسیرهای زیر جهت یافتن اسمبلی بررسی خواهند شد:
- دایرکتوری برنامه
- دایرکتوری که شامل فایل csc.exe میشود. که خود فایل mscorlib از همانجا خوانده میشود و مسیر آن شبیه مسیر زیر است:
%SystemRoot%\Microsoft.NET\Framework\v4.0.#####
- هر دایرکتوری که توسط سوئیچ lib/ مشخص شده باشد.
- هر دایرکتوری که توسط متغیر محلی lib مشخص شده باشد.