.net 动态编译&x27;我不能抓住错误——为什么?
使用此代码.net 动态编译&x27;我不能抓住错误——为什么?,.net,vb.net,.net,Vb.net,使用此代码 Imports System.CodeDom.Compiler Public Class Form1 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load Dim sb As New System.Text.StringBuilder sb.AppendLine("Imports System") sb.AppendLine("
Imports System.CodeDom.Compiler
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim sb As New System.Text.StringBuilder
sb.AppendLine("Imports System")
sb.AppendLine("Imports System.Xml")
sb.AppendLine("Imports System.Data")
sb.AppendLine("Imports System.Collections.Generic")
sb.AppendLine("Namespace dValuate")
sb.AppendLine("Class EvalRunTime")
sb.AppendLine("Public Function EvaluateIt() As Object")
sb.AppendLine("{0}")
sb.AppendLine("End Function")
sb.AppendLine("End Class")
sb.AppendLine("End Namespace")
Dim testCode As String = "Dim d As Decimal = ""a"""
Dim provider As VBCodeProvider = New VBCodeProvider
Dim params As CompilerParameters = New CompilerParameters
Dim results As CompilerResults
params.ReferencedAssemblies.Add("system.dll")
params.ReferencedAssemblies.Add("system.xml.dll")
params.ReferencedAssemblies.Add("system.data.dll")
params.ReferencedAssemblies.Add("System.Windows.Forms.dll")
params.CompilerOptions = "/t:library"
params.GenerateInMemory = True
results = provider.CompileAssemblyFromSource(params, String.Format(sb.ToString, testCode))
sb.Length = 0
If results.Errors.Count > 0 Then
For Each err As CompilerError In results.Errors
sb.AppendLine("Line: " + err.Line.ToString + ", Error: " + err.ErrorText)
Next
MsgBox(sb.ToString)
End If
End Sub
End Class
当我尝试将十进制设置为字符串时,为什么results.Errors.Count=0
是否有方法捕获此错误?您需要对
选项进行严格限制,以告知VB编译器在编译时实际检查类型兼容性
PS:考虑使用罗斯林代替CordDOM。
隐式将字符串转换为数字不是编译错误,没有严格模式编译。
将选项strict的开关添加到编译器选项:
params.CompilerOptions = "/t:library /optionstrict"
Visual Studio 2015不知道选项Strict
如何处理动态编译,但它会解释为什么代码编译得很好。是的;你需要对
选项严格要求。拍我的头。。当然有没有在飞行中使用Roslyn的样本?谢谢