guohq 发表于 2013-1-7 09:11:43

会用动态编译的进来看看

我有一段代码存储在一个文件中 如 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中直接编译是不会出错的,为什么使用动态编译就会出现?)

efan2000 发表于 2013-1-8 11:50:55

OT是自定义的扩展方法,应该在Ent.OT这个位置出错。

guohq 发表于 2013-1-8 11:53:39

怎么让其正常通过编译呢?
页: [1]
查看完整版本: 会用动态编译的进来看看