我正在使用 .net 和 codedom 在我想避免(或最好消除)文件系统访问的环境中。
我当前的代码:
Private Sub ProcessCommand(ByVal command As String)
Dim MyProvider As New VBCodeProvider
Dim cp As New CompilerParameters
cp.GenerateExecutable = True
cp.GenerateInMemory = True
Dim TempModuleSource As String = command
cp.ReferencedAssemblies.Add("System.dll")
cp.ReferencedAssemblies.Add("System.Windows.Forms.dll")
cp.IncludeDebugInformation = False
Dim cr As CompilerResults = MyProvider.CompileAssemblyFromSource(cp, TempModuleSource)
If cr.Errors.Count > 0 Then
Throw New ArgumentOutOfRangeException("Invalid Expression - please use something VB could evaluate")
Else
cr.CompiledAssembly.EntryPoint.Invoke(Nothing, Nothing)
End If
End Sub
我很惊讶地看到 GenerateInMemory = True 并没有真正让它在内存中生成。相反,二进制文件被编译并存储在一个临时文件中。有没有办法强制codedom将输出存储在内存中?也许通过强制二进制文件不使用临时文件?