Imports System.IO
Imports System.Globalization
Imports System.CodeDom.Compiler
Imports System.Text
Imports Microsoft.CSharp
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))
Console.WriteLine("Input source file not found - {0}", _
args(0))
End If
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")
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
' 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
compileOk = True
End If
End If
return compileOk
End Function
End Class
End Namespace
This class provides methods that can be used to retrieve instances of the C#
ICodeGenerator
and
ICodeCompiler
implementations.
This class contains a link demand and an inheritance demand at the class level that applies to all members. A
SecurityException
is thrown when either the immediate caller or the derived class does not have full-trust permission.
Compiles an assembly based on the
System.CodeDom
trees contained in the specified array of
CodeCompileUnit
objects, using the specified compiler settings.
(Inherited from
CodeDomProvider
)
Compiles an assembly from the source code contained in the specified files, using the specified compiler settings.
(Inherited from
CodeDomProvider
)
Compiles an assembly from the specified array of strings containing source code, using the specified compiler settings.
(Inherited from
CodeDomProvider
)
When overridden in a derived class, creates a new code generator using the specified file name for output.
(Inherited from
CodeDomProvider
)
When overridden in a derived class, creates a new code generator using the specified
TextWriter
for output.
(Inherited from
CodeDomProvider
)
Creates an object that contains all the relevant information required to generate a proxy used to communicate with a remote object.
(Inherited from
MarshalByRefObject
)
Releases the unmanaged resources used by the
Component
and optionally releases the managed resources.
(Inherited from
Component
)
Generates code for the specified Code Document Object Model (CodeDOM) compilation unit and sends it to the specified text writer, using the specified options.
(Inherited from
CodeDomProvider
)
Generates code for the specified Code Document Object Model (CodeDOM) expression and sends it to the specified text writer, using the specified options.
(Inherited from
CodeDomProvider
)
Generates code for the specified Code Document Object Model (CodeDOM) member declaration and sends it to the specified text writer, using the specified options.
(Inherited from
CodeDomProvider
)
Generates code for the specified Code Document Object Model (CodeDOM) namespace and sends it to the specified text writer, using the specified options.
(Inherited from
CodeDomProvider
)
Generates code for the specified Code Document Object Model (CodeDOM) statement and sends it to the specified text writer, using the specified options.
(Inherited from
CodeDomProvider
)
Generates code for the specified Code Document Object Model (CodeDOM) type declaration and sends it to the specified text writer, using the specified options.
(Inherited from
CodeDomProvider
)
Obsolete.
Retrieves the current lifetime service object that controls the lifetime policy for this instance.
(Inherited from
MarshalByRefObject
)
Returns an object that represents a service provided by the
Component
or by its
Container
.
(Inherited from
Component
)
Obsolete.
Obtains a lifetime service object to control the lifetime policy for this instance.
(Inherited from
MarshalByRefObject
)
Returns a value that indicates whether the specified value is a valid identifier for the current language.
(Inherited from
CodeDomProvider
)
Returns a
String
containing the name of the
Component
, if any. This method should not be overridden.
(Inherited from
Component
)