1

Web サイトからわかる限り、次のコードは最上位のプロパティを持つ DLL にコンパイルする必要がありますVersion

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これにプロパティを追加する方法もわかりません)。

4

1 に答える 1

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)
于 2012-04-24T19:59:38.680 に答える