PDA

View Full Version : کامپایل برنامه با کد در داخل خود برنامه



astani
یک شنبه 20 خرداد 1386, 07:35 صبح
با سلام و خسته نباشید
من می خواستم در داخل کد برنامه یک پروژه رو کامپایل کنم. منظورم اینه که برنامه ای بنویسم که پس از اجرا شدن و گرفتن چند ورودی از کابر براساس داده های گرفته شده یک فایل اجرایی دیگه رو بوجود بیاره. اگر راهنماییم کنید که چطور اینکار امکان پذیر هست ممنون میشم.

ghafoori
یک شنبه 20 خرداد 1386, 13:10 عصر
دو تا کار می توانید انجام دهید با کامپایلر vb به نام vbc.exe در پوشه دات نت است و چند خط کد فرمان می تونید چند فایل را با هم کامپایل کنید و دومین راه استفاده از کلاس های vbcodeprovider است یک مثال از msdn برای دومی می زارم بقیه را هم کمی جستجو کنید مثالهای جالبی وجود دارد


Public Shared Function CompileExecutable(sourceName As String) As Boolean
Dim sourceFile As FileInfo = New FileInfo(sourceName)
Dim provider As CodeDomProvider = Nothing
Dim compileOk As Boolean = False

' Select the code provider based on the input file extension.
If sourceFile.Extension.ToUpper(CultureInfo.Invariant Culture) = ".CS"

provider = New Microsoft.CSharp.CSharpCodeProvider()

ElseIf sourceFile.Extension.ToUpper(CultureInfo.Invariant Culture) = ".VB"

provider = New Microsoft.VisualBasic.VBCodeProvider()

Else
Console.WriteLine("Source file must have a .cs or .vb extension")
End If

If Not provider Is Nothing

' Format the executable file name.
' Build the output assembly path using the current directory
' and <source>_cs.exe or <source>_vb.exe.

Dim exeName As String = String.Format("{0}\{1}.exe", _
System.Environment.CurrentDirectory, _
sourceFile.Name.Replace(".", "_"))

Dim cp As CompilerParameters = new CompilerParameters()

' Generate an executable instead of
' a class library.
cp.GenerateExecutable = True

' Specify the assembly file name to generate.
cp.OutputAssembly = exeName

' Save the assembly as a physical file.
cp.GenerateInMemory = False

' Set whether to treat all warnings as errors.
cp.TreatWarningsAsErrors = False

' Invoke compilation of the source file.
Dim cr As CompilerResults = provider.CompileAssemblyFromFile(cp, _
sourceName)

If cr.Errors.Count > 0
' Display compilation errors.
Console.WriteLine("Errors building {0} into {1}", _
sourceName, cr.PathToAssembly)

Dim ce As CompilerError
For Each ce In cr.Errors
Console.WriteLine(" {0}", ce.ToString())
Console.WriteLine()
Next ce
Else
' Display a successful compilation message.
Console.WriteLine("Source {0} built into {1} successfully.", _
sourceName, cr.PathToAssembly)
End If

' Return the results of the compilation.
If cr.Errors.Count > 0
compileOk = False
Else
compileOk = True
End If
End If
return compileOk

End Function

astani
دوشنبه 21 خرداد 1386, 12:30 عصر
آقای غفوری با تشکر از راهنماییتون
اما من تو این کدی که نوشتین مشکل دارم یکی اینکه دستور CompileAssemblyFromFile از قسمت provider ke که دستور اصلی هست درواقع درست نیست یعنی این دستور جزو توابع provider نیست. من از دستورزیر برای اینکار استفاده کردمcompiler.CompileAssemblyFromFile
تغییرات لازم رو هم تو کد دادم ولی متاسفانه به همه دستورات موجود در فایلی که قراره کامپایل بشه ایراد داد . نمی دونم اون فایلی که قراره کاپایل بشه چطور باید باشه چون همه مدلها رو امتحان کردم ممنون میشم اگه راهمایی کنین حتی اگه فقط یک فرم حالی رو هم باز کنه بقیشو حل می کنم.
ممنون

ghafoori
دوشنبه 21 خرداد 1386, 13:20 عصر
دوست عزیز به این پروژه نگاهی بیانداز برای من که کار می کند حتما داخل اضافه کردن رفرنس مشکل داره حتما این خط را هم اصلاح کن تا برنامه درست اجرا شود
9059