PDA

View Full Version : تولید فایل exe داخل پروزه!



amir-yeketaz
چهارشنبه 13 مهر 1390, 22:06 عصر
من یه پروژه دارم که قراره از یه سری کارا که میکنم که الان مهم نیست:لبخند: یه سری کد تولید کنه و بعدشم میخوام که از این فایل کد سی شارپ(.cs) یه فایل exe (اجرایی) تولید کنه...
حالا چیکار کنم؟!


با تشکر ...

Nima NT
چهارشنبه 13 مهر 1390, 22:33 عصر
یعنی میخواهید کد رو به صورت Runtime کامپایل کنید ؟

mehdi.mousavi
چهارشنبه 13 مهر 1390, 22:48 عصر
من یه پروژه دارم که قراره از یه سری کارا که میکنم که الان مهم نیست:لبخند: یه سری کد تولید کنه و بعدشم میخوام که از این فایل کد سی شارپ(.cs) یه فایل exe (اجرایی) تولید کنه... حالا چیکار کنم؟! با تشکر ...

سلام.
فرض می کنم که 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 ی مورد نظر تولید نخواهد شد...

موفق باشید.

amir-yeketaz
چهارشنبه 13 مهر 1390, 23:08 عصر
ایول استاد :لبخند: ... یعنی دم ایرانی های خودمون گرم :لبخند:... اینجا (http://stackoverflow.com/questions/7665111/how-to-create-an-exe-file-from-my-created-file-cs-file)م پرسیدم و ببینید چقدر مانو ابله فرض کردن!!! ...بیخیال ...

میشه یه لینکی چیزی بدین تا من بیشتر در باب این کلاسایی که استفاده کردین اطلاعات کسب کنم؟(البته به غیر از MSDN :لبخند:) ... یا اصن اگه وقت دارین خودتون توضیح بدین؟!

ببخشین ... یه چیز دیگه؟! ... چیکار کنم این پنجره ی کنسول نیاد بالا؟! ... منظورم اینه که وقتی من اون output رو اجرا میکنم اولش صفحه ی کنسول میاد که من چون میخوام ویندوز فرم باشه نمیخوام که پنجره ی کنسول باز بشه ...

mehdi.mousavi
چهارشنبه 13 مهر 1390, 23:25 عصر
ایول استاد :لبخند: ... یعنی دم ایرانی های خودمون گرم :لبخند:... اینجا (http://stackoverflow.com/questions/7665111/how-to-create-an-exe-file-from-my-created-file-cs-file)م پرسیدم و ببینید چقدر مانو ابله فرض کردن!!! ...بیخیال ... میشه یه لینکی چیزی بدین تا من بیشتر در باب این کلاسایی که استفاده کردین اطلاعات کسب کنم؟(البته به غیر از MSDN :لبخند:) ... یا اصن اگه وقت دارین خودتون توضیح بدین؟!

سلام
به نظر من، سوال رو خوب مطرح نکرده اید (با کمال احترام) و فرد اولی که به سوال شما پاسخ داده، باعث شده که مسیر پاسخ های بعدی تغییر کرده باشه. سوال شما میگه "چطوری از طریق یک فایل .cs میتونم فایل executable ایجاد کنم؟" و خوب، پاسخ این سوال، همونی هستش که اونجا دریافت کرده اید. :) هر وقت چنین اتفاقی افتاد، بدونید که سوال رو روشن مطرح نکرده اید و سعی کنید سوال رو بهتر مطرح کنید.



در هر حال، در خط اول کد، یک CodeDomProvider انتخاب میشه (که پارامتر اول زبان مورد نظر و پارامتر دوم، Option هایی هستش که میخوام به Provider پاس کنم).
خط دوم، کلاسی از نوع CompilerParameter میسازه، GenerateExecutable اونو true میذاره که فایل exe ایجاد بشه و نه DLL، پارامتر بعدیش هم نام فایل خروجی رو تعیین میکنه. در نهایت، با استفاده از ReferenceAssemblies کلیه Reference های مورد نظرم رو به Compiler معرفی می کنم.
سپس در خط 10-23 کد مورد نظرم رو بصورت string نوشتم...
در نهایت، با استفاده از متود CompileAssemblyFromSource، خروجی مورد نظرم رو تولید کرده ام.

موفق باشید.

amir-yeketaz
چهارشنبه 13 مهر 1390, 23:35 عصر
ببخشین ... یه چیز دیگه؟! ... چیکار کنم این پنجره ی کنسول نیاد بالا؟! ... منظورم اینه که وقتی من اون output رو اجرا میکنم اولش صفحه ی کنسول میاد که من چون میخوام ویندوز فرم باشه نمیخوام که پنجره ی کنسول باز بشه ... اینم جواب بدین ممنون میشم ...

ببخشید ... ولی هر کاری میکنم اون چیزی که من گفتم و خواستم نمیشه!!!

کمک کنین خواهشا!

در این لحظه درست شد!


CompilerOptions = "/target:winexe"