Столкнулся с проблемой при использовании Lambda в CodeDom для vb.net (C# не проверял).
Imports System.CodeDom.Compiler
Module Module1
Sub Main()
'okDim f = Function(x) x
'динамическая компиляция кода вышеDim comp As CodeDomProvider = CodeDomProvider.CreateProvider("VisualBasic")
Dim res As CompilerResults = comp.CompileAssemblyFromSource(New CompilerParameters, "Dim f = Function(x) x")
'выдает "Ожидалось выражение"For Each err As CompilerError In res.Errors
MsgBox(err.ErrorText)
Next
End Sub
End Module
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, ST1, Вы писали:
H>Одну функцию скомпилировать нелзя. Нужный полный исходник с модулем и методами.
Я привел синтетический пример. В реальном же коде компилирую классы-наследники, в одной из функции которых без Lambda не обойтись.
Здравствуйте, ST1, Вы писали:
ST1>Я привел синтетический пример. В реальном же коде компилирую классы-наследники, в одной из функции которых без Lambda не обойтись.
Похоже что используется компилятор из .NET 2.0. Попробуй создать экземпляр VBCodeProvider явно.
Imports System.CodeDom.Compiler
Imports System.Text
Module Module1
Sub Main()
'okDim f = Function(x) x
'динамическая компиляция кода вышаDim comp As CodeDomProvider = CodeDomProvider.CreateProvider("VisualBasic")
Dim code As New StringBuilder
code.AppendLine("Module Module1")
code.AppendLine(" Sub Main()")
code.AppendLine(" Dim f = Function(x) x")
code.AppendLine(" End Sub")
code.AppendLine("End Module")
Dim res As CompilerResults = comp.CompileAssemblyFromSource(New CompilerParameters, code.ToString)
'выдает "Ожидалось выражение"For Each err As CompilerError In res.Errors
MsgBox(err.ErrorText)
Next
End Sub
End Module
Здравствуйте, hardcase, Вы писали:
H>Здравствуйте, ST1, Вы писали:
ST1>>Я привел синтетический пример. В реальном же коде компилирую классы-наследники, в одной из функции которых без Lambda не обойтись.
H>Похоже что используется компилятор из .NET 2.0. Попробуй создать экземпляр VBCodeProvider явно.
Изменений нет
Здравствуйте, ST1, Вы писали:
ST1>Здравствуйте, hardcase, Вы писали:
H>>Здравствуйте, ST1, Вы писали:
ST1>>>Я привел синтетический пример. В реальном же коде компилирую классы-наследники, в одной из функции которых без Lambda не обойтись.
H>>Похоже что используется компилятор из .NET 2.0. Попробуй создать экземпляр VBCodeProvider явно. ST1>Изменений нет
Imports System.CodeDom.Compiler
Imports System.Text
Module Module1
Sub Main()
'okDim f As System.Func(Of Double, Double) = Function(x) x
'динамическая компиляция кода вышеDim op As New Dictionary(Of String, String)
op.Add("CompilerVersion", "v3.5")
Dim comp As New VBCodeProvider(op)
Dim code As New StringBuilder
code.AppendLine("Module Module1")
code.AppendLine(" Sub Main()")
code.AppendLine(" Dim f As System.Func(Of Double, Double) = Function(x) x")
code.AppendLine(" End Sub")
code.AppendLine("End Module")
Dim res As CompilerResults = comp.CompileAssemblyFromSource(New CompilerParameters, code.ToString)
'выдает: Тип "Func" не определенFor Each err As CompilerError In res.Errors
MsgBox(err.ErrorText)
Next
End Sub
End Module