据我所知website,以下代码应编译为具有顶级属性Version
的DLL:
namespace MyLibrary
[Module]
class MainClass:
public static Version as string
static def constructor():
Version = "0.1"
这会编译,但如果我然后将这些命令输入booish
:
import MyLibrary
print (Version)
然后我得到“错误:未知标识符:'版本'”。
据推测,此代码适用于该语言的早期版本。我使用的是0.9.4.9。实现这种效果的正确方法是什么?
(我注意到有一个隐式静态类MyVersionModule
,其中放置了顶级静态方法,但我不知道如何向其添加属性。)
答案 0 :(得分:0)
在.net中,没有办法让方法或字段实际上不是一个类的成员。 Boo通过在模块中使用主文件的隐式类来隐藏它(如您所注意到的)但是在导入时仍然需要以成员的身份访问它。
对于静力学,您必须首先引用该类型然后引用该成员,因此在您的示例中打印版本将是这样的:
import MyLibrary
print (MainClass.Version)
当然,这不是在.net中存储版本信息的“正确”方法,而是使用汇编级属性。这看起来更像是这样:
[assembly: System.Reflection.AssemblyVersion("1.0")]
namespace MyLibrary
[Module]
class MainClass:
pass
然后获得使用反射做的版本,有几种方法可以获得程序集,但最简单的方法是获取Type然后它的程序集:
import System
import System.Reflection
import MyLibrary
atts = typeof(MainClass).Assembly \
.GetCustomAttributes(typeof(AssemblyVersionAttribute), false)
version = (atts[0] as AssemblyVersionAttribute).Version
print(version)