为什么使用DLRCachedCode类生成一些IronPython dll?

时间:2010-02-23 11:27:39

标签: asp.net ironpython

当我将一些没有类定义的.py代码文件编译到dll中时,编译后的dll会在里面创建一个“DRLCachedCode”类。那是为什么?

2 个答案:

答案 0 :(得分:2)

当您编译IronPython代码时,它不会被编译为正常的.NET代码,在该代码中,您在源级别的每个类都有一个IL级别的类。相反,它被编译成我们使用DLR在内部编译的相同形式。

对于用户代码,这只是一堆可执行方法。每个模块,函数定义和类定义都有一种方法。当模块代码运行时,它将对字典执行。根据您在模块中执行的操作,.NET方法可以在字典a:

中发布
  • 新式类的PythonType

  • 旧式类的OldClass

  • 函数的PythonFunction对象 定义

  • 您指定的任何值(例如 富= 42)

  • 执行exec没有提供字典的任何副作用(例如exec“x = 42”)

  • 等...

这个谜题的最后一块是这个字典存储在哪里,你如何得到它?字典存储在PythonModule对象中,我们在用户导入预编译模块时创建它,然后我们针对它执行模块。因此,此代码仅可通过Python的import语句(或通过IronPython.Hosting.Python类公开的ScriptEngine“ImportModule”上的扩展方法)获得。

因此,代码的所有布局都被视为内部实现细节,我们保留随时更改的权利。

最后,名称DLRCachedCode来了,因为DLR(外层)为我们保存了这段代码。如果有人真的想要,可以将多种语言保存到单个DLL中。

答案 1 :(得分:0)

此链接回答了以下问题:http://www.ironpython.info/index.php/Using_Compiled_Python_Classes_from_.NET/CSharp_IP_2.6如何从C#访问IronPython类。

手动编译:\ IronPython 2.7 \ Tools \ Scripts> ipy pyc.py / out:MyClass / target:dll MyClass.py不起作用。只有当我使用SharpDevelop和IronPython时,它才能在帖子中工作。