2009-07-29 12 views
13

私はC#を使用してDLLを作成しました。どのようにIronPythonでDLLを使用しますか。私はclr.AddReference( "yxz.dll")を使ってdllを追加しようとしました。しかしそれは失敗する。私は、IronPythonスクリプトの実行ディレクトリにdllを置こうとしました。それでも、dllを参照しようとしているときに "名前xyzが見つかりません"と言います。IronPythonでC#dllを使用する方法

+1

行をclr.AddReference( "yxz")に変更するとどうなりますか?違いはありますか? –

+0

DLLが見つからないという問題がある場合は、SysinternalsのProcess Monitorを使用して何が間違っているのかを特定します。 –

+1

fuslogvw.exeは、管理されたDLLが見つからない理由を理解するのにも良い方法です。これはプラットフォームSDKに付属しています。 –

答えて

8

ファイルを探す場所がわからないため、ファイルを見つけることができないと思われます.clr.AddReference ...()関数の詳細については、hereを参照してください。

2

Creating .NET Classes Dynamically from IronPythonの例では、アセンブリを作成します(後でディスクに「DynamicAsm.dll」として保存されます)。それには「DynamicType」というクラスが含まれていて、「test」という静的メソッドが1つあります。このメソッドは4つの整数を取り、それらを加算します。

The nice thing is that this saves "DynamicAsm.dll" to disk. You can then start an IronPython interactive interpreter session and do the following :

>>> import clr 
>>> clr.AddReference('DynamicAsm.dll') 
>>> import DynamicType 
>>> DynamicType.test(2, 3, 4, 5) 
14 

例はimport文でクラス名を使用することに注意してください。

+2

'import sys print sysを使用してください。clr.AddReferenceがdllをどこで探しているのかを判断するためにパス " – mydogisbox

+0

私は実際にこれを外部から行うことはできますか?または、本当にclrをインポートして、IronPythonスクリプトのアセンブリへの参照を追加する必要がありますか?ここでは、静的にインポートしてスクリプト内で常に利用できるようにするアセンブリをいくつか持っています。 –

8
import clr  
clr.AddReferenceToFileAndPath(r"C:\Folder\Subfolder\file.dll") 

は、コメントでJeffが提案した最も単純な方法です。また、これは動作します:あなたはこれを使用することができます

import clr 
import sys 

sys.path.append(r"C:\Folder\Subfolder") # path of dll 
clr.AddReference ("Ipytest.dll") # the dll 
import TestNamspace # import namespace from Ipytest.dll 
+3

'clr.AddReferenceToFileAndPath'を使うこともできます。これはまさにそれです。 –

+0

この動作は、IronPythonコンソールからのみ発生します。私がスクリプトを実行すると、それは問題ありません。 IronPythonのスクリプトを実行すると、 'sys.path'には現在の作業ディレクトリへの絶対パスが含まれています。コンソールに入力すると、 'sys.path'には現在の作業ディレクトリの'。 'のみが含まれます。それは行動の違いを説明するかもしれない。 –

+0

これを試しましたが、エラーが発生しました:AttributeError: 'module'オブジェクトに 'AddReferenceToFileAndPath'属性がありません – Avis

0

import clr 
clr.AddReferenceToFile("yxz.dll") 
0

それは相対パスを取るので、それはclr.AddReferenceToFile(ファイル名)を使用することをお勧めします。

import clr 
clr.AddReferenceToFile("xxx.dll") 

次に、あなたはいつものように、インポートによってクラスをインポートすることができます

import xxx 

または

from xxx import * 

私はあなたはそれが非常に便利です、この本をチェックアウトすることをお勧めします。 https://play.google.com/store/apps/details?id=com.gavin.gbook

+0

AddReferenceToFileAndPathは相対ディレクトリパスfwiwでも動作します。 – EdwardGarson

0

この現象は、IronPythonコンソールからのみ発生します。私がスクリプトを実行すると、それは問題ありません。 IronPythonのスクリプトを実行すると、sys.pathには現在の作業ディレクトリへの絶対パスが格納されます。コンソールに入力すると、sys.pathには '。'だけが含まれます。現在の作業ディレクトリ用です。それは行動の違いを説明するかもしれない。ハック溶液のビットとして

、Iは

"""This hacky script fixes the sys.path when I run the ipy console.""" 

import sys 
import os 

sys.path.insert(0, os.getcwd()) 

del sys 
del os 

fixpath.pyファイルを作成したそれから私はこのファイルの絶対パスと環境変数IRONPYTHONSTARTUPを設定します。その後、IronPythonコンソールを起動するたびにこのスクリプトが実行され、sys.pathには現在の作業ディレクトリへの絶対参照が含まれ、その後のclr.AddReferenceの呼び出しは正常に動作します。

関連する問題