Here's an article I found with a quick Google search Pete.
http://www.eggheadcafe.com/articles/20030908.asp
I 'think' I know where you're headed with this. Let us know how it turns out.
I got this one to work
(EvaluateVB "MsgBox (\"Hello World\")")
It does create a unknown assembly so will eat up memory.
But it works for a compile at runtime function. You can also import a file.vb file too if you play with a couple methods.
A certain expert I corresponded with regarding this function said.
"Compiler as a Service is going to be a key feature in .NET 5"
so something like this will be available in a couple years without the baggage.
I thought that was good news.
Peter
It is a modified form of the original code on eggheadcafe that was recommended by Bobby C. Jones See link above.
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.DatabaseServices
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Geometry
Imports Autodesk.AutoCAD.GraphicsInterface
Imports Autodesk.AutoCAD.Runtime
Imports Microsoft.VisualBasic
Imports System
Imports System.Text
Imports System.CodeDom.Compiler
Imports System.Reflection
Imports System.IO
Public Class EvaluatorVBClass
' Syntax (EvaluateVB "MsgBox (\"Hello World\")")
<LispFunction("EvaluateVB")> _
Public Function EvaluateVB(ByVal rbfLISPArguments As ResultBuffer) As TypedValue
Dim arrLISPArguments As TypedValue() = rbfLISPArguments.AsArray
Dim objReturn As Object = Evaluate(arrLISPArguments(0).Value.ToString)
If Not objReturn = Nothing Then
Select Case (objReturn.GetType.ToString)
Case "System.Int16"
Return New TypedValue(5003, objReturn)
Case "System.Int32"
Return New TypedValue(5010, objReturn)
Case "System.String"
Return New TypedValue(5005, objReturn)
Case "System.Double"
Return New TypedValue(5001, objReturn)
End Select
End If
Return New TypedValue(5019, -1)
End Function
Public Function Evaluate(ByVal vbCode As String) As Object
'Dim objVBCodeProvider As VBCodeProvider = New VBCodeProvider
Dim objCodeDomProvider As CodeDomProvider = CodeDomProvider.CreateProvider("VisualBasic")
Dim objCompilerParameters As CompilerParameters = New CompilerParameters()
objCompilerParameters.GenerateInMemory = True
' objCompilerParameters.OutputAssembly = "C:\Documents and Settings\peter.CORDECKSALES\My Documents\Visual Studio 2008\Projects\Evaluation\EvaluateVB\EvaluateVB\bin\Debug\testeval.dll"
objCompilerParameters.ReferencedAssemblies.Add("system.dll")
'objCompilerParameters.ReferencedAssemblies.Add("c:\yourProjectDir\bin\YourBaseClass.dll")
objCompilerParameters.CompilerOptions = "/t:library"
Dim objStringBuilder As StringBuilder = New StringBuilder("")
objStringBuilder.Append("Imports System" & vbCrLf)
objStringBuilder.Append("Imports Microsoft.VisualBasic" & vbCrLf)
objStringBuilder.Append("Namespace Code " & vbCrLf)
objStringBuilder.Append("Class Library " & vbCrLf)
objStringBuilder.Append("public function EvalCode() as Object " & vbCrLf)
'objStringBuilder.Append("Dim objResult as Object " & vbCrLf)
'sb.Append("YourNamespace.YourBaseClass thisObject = New YourNamespace.YourBaseClass()")
objStringBuilder.Append("Dim objResult as Object = " & vbCode & vbCrLf)
objStringBuilder.Append("Return objResult" & vbCrLf)
objStringBuilder.Append("End Function " & vbCrLf)
objStringBuilder.Append("End Class " & vbCrLf)
objStringBuilder.Append("End Namespace" & vbCrLf)
Dim objCompilerResults As CompilerResults
'
objCompilerResults = _
objCodeDomProvider.CompileAssemblyFromSource(objCompilerParameters, objStringBuilder.ToString())
If objCompilerResults.Errors.Count > 0 Then
' Display compilation errors.
Dim objCompilerError As CompilerError
For Each objCompilerError In objCompilerResults.Errors
MsgBox(objCompilerError.ToString())
Next objCompilerError
Else
Dim objAssembly As System.Reflection.Assembly = objCompilerResults.CompiledAssembly
Dim objInstance As Object = objAssembly.CreateInstance("Code.Library")
Dim objType As Type = objInstance.GetType()
Dim objMethodInfo As MethodInfo = objType.GetMethod("EvalCode")
Return objMethodInfo.Invoke(objInstance, Nothing)
End If
Return Nothing
End Function
End Class__________________