会用动态编译的进来看看
我有一段代码存储在一个文件中 如 c:\ab.vb 内容如下:Imports Microsoft.VisualBasic
Imports System
Imports Autodesk.AutoCAD.DatabaseServices
Imports System.Runtime.CompilerServices
Public Module EntityExtend
<Extension()> _
Public Function OT(ByVal Ent As Entity) As String
Return "1"
End Function
End Module
Public Class SelectionCompiler
Public Function EntityIsTrue(ByVal Ent As Entity) As Boolean
Return Ent.Layer = "1" And Ent.OT = "12"
End Function
End Class
现在想在程序中用动态编译的方法对上述代码进行编译,代码如下:
Dim ComPara As New CompilerParameters() With {.GenerateExecutable = False, .GenerateInMemory = True}
ComPara.ReferencedAssemblies.Add("C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll")
ComPara.ReferencedAssemblies.Add("C:\Program Files\Autodesk\AutoCAD Map 3D 2011\acdbmgd.dll")
Dim Pro As New VBCodeProvider()
Dim codestr As String = System.IO.File.ReadAllText("c:\ab.vb")
Dim Compiled As CompilerResults = Pro.CompileAssemblyFromSource(ComPara, codestr)
执行到此处,Compiled 中会提示源代码有错,错误内容如下:
“OT”不是“Autodesk.AutoCAD.DatabaseServices.Entity”的成员。
请问为什么会出错这样的错误?(将 c:\ab.vb代码拷到VS中直接编译是不会出错的,为什么使用动态编译就会出现?)
OT是自定义的扩展方法,应该在Ent.OT这个位置出错。 怎么让其正常通过编译呢?
页:
[1]