.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的样本?谢谢