当前位置:编程学习 > C#/ASP.NET >>

会用动态编译的进来看看

我有一段代码存储在一个文件中 如 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中直接编译是不会出错的,为什么使用动态编译就会出现?) --------------------编程问答-------------------- 那个是扩展方法,你的reference不够。看看VS中的内容,把需要的补充进去。 --------------------编程问答-------------------- 具体要添加哪些参考呢?
 ComPara.ReferencedAssemblies.Add("C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll")
        ComPara.ReferencedAssemblies.Add("C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll")
        ComPara.ReferencedAssemblies.Add("C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll")
        ComPara.ReferencedAssemblies.Add("C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll")
        ComPara.ReferencedAssemblies.Add("C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll")
        ComPara.ReferencedAssemblies.Add("C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll")

添加了这么多,还是不行。 --------------------编程问答-------------------- 没人知道么?
补充:.NET技术 ,  .NET Framework
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,