من یه پروژه دارم که قراره از یه سری کارا که میکنم که الان مهم نیست یه سری کد تولید کنه و بعدشم میخوام که از این فایل کد سی شارپ(.cs) یه فایل exe (اجرایی) تولید کنه...
حالا چیکار کنم؟!
با تشکر ...
من یه پروژه دارم که قراره از یه سری کارا که میکنم که الان مهم نیست یه سری کد تولید کنه و بعدشم میخوام که از این فایل کد سی شارپ(.cs) یه فایل exe (اجرایی) تولید کنه...
حالا چیکار کنم؟!
با تشکر ...
یعنی میخواهید کد رو به صورت Runtime کامپایل کنید ؟
سلام.
فرض می کنم که EXE ی مورد نظر رو می خواهید توسط C# Compiler نسخه 4 ایجاد کنید. برای اینکار، می تونید بدین شکل عمل کنید:
CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp", new Dictionary<string, string> { { "CompilerVersion", "v4.0" } });
CompilerParameters parameters = new CompilerParameters
{
GenerateExecutable = true,
OutputAssembly = "output.exe",
};
parameters.ReferencedAssemblies.AddRange(new string[] { "System.Windows.Forms.dll" });
string source =
"using System;" +
"using System.Windows.Forms;" +
"namespace Whatever" +
"{" +
" static class Program" +
" {" +
" [STAThread]" +
" static void Main()" +
" {" +
" MessageBox.Show(\"Test\");" +
" }" +
" }" +
"}";
CompilerResults results = provider.CompileAssemblyFromSource(parameters, source);
کد فوق، EXE ای به اسم output.exe ایجاد می کنه که پس از اجرا کردن، باعث باز شدن پنجره ای و نمایش عبارت Test در اون پنجره میشه...
تنها نکته ای که باید در کدتون منظور کنید اینه که results نهایی رو چک کنید تا فاقد Error باشه، در غیر اینصورت EXE ی مورد نظر تولید نخواهد شد...
موفق باشید.
ایول استاد ... یعنی دم ایرانی های خودمون گرم ... اینجام پرسیدم و ببینید چقدر مانو ابله فرض کردن!!! ...بیخیال ...
میشه یه لینکی چیزی بدین تا من بیشتر در باب این کلاسایی که استفاده کردین اطلاعات کسب کنم؟(البته به غیر از MSDN ) ... یا اصن اگه وقت دارین خودتون توضیح بدین؟!
ببخشین ... یه چیز دیگه؟! ... چیکار کنم این پنجره ی کنسول نیاد بالا؟! ... منظورم اینه که وقتی من اون output رو اجرا میکنم اولش صفحه ی کنسول میاد که من چون میخوام ویندوز فرم باشه نمیخوام که پنجره ی کنسول باز بشه ...
آخرین ویرایش به وسیله amir-yeketaz : چهارشنبه 13 مهر 1390 در 23:28 عصر
سلام
به نظر من، سوال رو خوب مطرح نکرده اید (با کمال احترام) و فرد اولی که به سوال شما پاسخ داده، باعث شده که مسیر پاسخ های بعدی تغییر کرده باشه. سوال شما میگه "چطوری از طریق یک فایل .cs میتونم فایل executable ایجاد کنم؟" و خوب، پاسخ این سوال، همونی هستش که اونجا دریافت کرده اید. :) هر وقت چنین اتفاقی افتاد، بدونید که سوال رو روشن مطرح نکرده اید و سعی کنید سوال رو بهتر مطرح کنید.
- در هر حال، در خط اول کد، یک CodeDomProvider انتخاب میشه (که پارامتر اول زبان مورد نظر و پارامتر دوم، Option هایی هستش که میخوام به Provider پاس کنم).
- خط دوم، کلاسی از نوع CompilerParameter میسازه، GenerateExecutable اونو true میذاره که فایل exe ایجاد بشه و نه DLL، پارامتر بعدیش هم نام فایل خروجی رو تعیین میکنه. در نهایت، با استفاده از ReferenceAssemblies کلیه Reference های مورد نظرم رو به Compiler معرفی می کنم.
- سپس در خط 10-23 کد مورد نظرم رو بصورت string نوشتم...
- در نهایت، با استفاده از متود CompileAssemblyFromSource، خروجی مورد نظرم رو تولید کرده ام.
موفق باشید.
اینم جواب بدین ممنون میشم ...ببخشین ... یه چیز دیگه؟! ... چیکار کنم این پنجره ی کنسول نیاد بالا؟! ... منظورم اینه که وقتی من اون output رو اجرا میکنم اولش صفحه ی کنسول میاد که من چون میخوام ویندوز فرم باشه نمیخوام که پنجره ی کنسول باز بشه ...
ببخشید ... ولی هر کاری میکنم اون چیزی که من گفتم و خواستم نمیشه!!!
کمک کنین خواهشا!
در این لحظه درست شد!
CompilerOptions = "/target:winexe"
آخرین ویرایش به وسیله amir-yeketaz : پنج شنبه 14 مهر 1390 در 01:14 صبح