Imports System
Imports System.IO Imports System.Globalization Imports System.CodeDom.Compiler Imports System.Text Imports Microsoft.CSharp Imports Microsoft.VisualBasic Namespace CodeProviders Class CompileSample <STAThread()> _ Public Shared Sub Main(args() As String) If args.Length > 0 ' First parameter is the source file name. If File.Exists(args(0)) CompileExecutable(args(0)) Else Console.WriteLine("Input source file not found - {0}", _ args(0)) End If Else Console.WriteLine("Input source file not specified on command line!") End If End Sub 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.InvariantCulture) = ".CS" provider = CodeDomProvider.CreateProvider("CSharp") ElseIf sourceFile.Extension.ToUpper(CultureInfo.InvariantCulture) = ".VB" provider = CodeDomProvider.CreateProvider("VisualBasic") 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 End Class End Namespace
https://msdn.microsoft.com/en-us/library/microsoft.csharp.csharpcodeprovider%28v=vs.110%29.aspx
예제 ) http://www.codeproject.com/Tips/715891/Compiling-Csharp-Code-at-Runtime
'VB.net & WPF & C#' 카테고리의 다른 글
Producer & Consumer Model - use Queue, Threadpool (0) | 2016.08.26 |
---|---|
How to select multiple controls by mouse-dragging over them (0) | 2016.08.26 |
Yet another thread-safe blocking queue for .NET ( producer - consumer) (0) | 2016.08.08 |
OrdinalIgnoreCase Property - 문자비교시 대소문자 처리 옵션 (0) | 2016.07.27 |
VB.net Parsing XML (0) | 2016.07.18 |