2010-10-19 5 views
2

J'ai créé un projet de bibliothèque de classe dans Visual Studio 2010 et créé ajouté la classe VB.Net suivante:Pourquoi ne peut IronPython trouver mon VS2010 VB.Net bibliothèque de classes DLL

Public Class Dumb 
    Private name As String 

    Public Sub New(ByVal newName As String) 
     name = newName 
    End Sub 

    Public Sub sayHi() 
     System.Console.WriteLine("Hi " & name) 
    End Sub 
End Class 

J'ai construit la solution et Generated un fichier DLL (disons PATH_TO_NEW_DLL).

Dans IronPython, j'obtiens l'erreur ci-dessous lorsque j'essaie de clr.AddReferenceToFileAndPath (PATH_TO_NEW_DLL). Le fichier DOES existe sur mon ordinateur.

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IOError: System.IO.IOException: file does not exist: [PATH_TO_NEW_DLL] 
    at IronPython.Runtime.ClrModule.AddReferenceToFileAndPath(CodeContext context, String file) 
    at IronPython.Runtime.ClrModule.AddReferenceToFileAndPath(CodeContext context, String[] files) 
    at Microsoft.Scripting.Utils.ActionHelper`2.Invoke(Object arg0, Object arg1) 
    at Microsoft.Scripting.Utils.ReflectedCaller.Invoke(Object[] args) 
    at Microsoft.Scripting.Actions.Calls.MethodCandidate.Caller.Call(Object[] args, Boolean& shouldOptimize) 
    at IronPython.Runtime.Types.BuiltinFunction.BuiltinFunctionCaller`2.Call1(CallSite site, CodeContext context, TFuncType func, T0 arg0) 
    at System.Dynamic.UpdateDelegates.UpdateAndExecute3[T0,T1,T2,TRet](CallSite site, T0 arg0, T1 arg1, T2 arg2) 
    at <unnamed>$28.<unnamed>(CodeContext $globalContext, FunctionCode functionCode) in <stdin>:line 1 
    at IronPython.Compiler.PythonScriptCode.RunWorker(CodeContext ctx) 
    at IronPython.Compiler.PythonScriptCode.Run(Scope scope) 
    at IronPython.Hosting.PythonCommandLine.<>c__DisplayClass1.<RunOneInteraction>b__0() 

Répondre

1

Utilisez un chemin relatif vers votre fichier de démarrage. Voici un exemple:

Dans l'un de mes projets, le fichier de démarrage (celui qui a l'icône verte «jouer» dans votre explorateur de solutions) se trouvait dans un dossier contenant un autre dossier PMX. Dans le dossier PMX se trouvait la DLL à laquelle j'essayais d'accéder. Cette DLL contenait l'espace de noms PMXlib. L'espace de noms PMXlib avait une classe appelée "PMX". Ainsi, la structure des répertoires est la suivante:

PMX\ 
    PMXlib.dll 
main.py 

Ce code j'accéder à la classe PMX dans la PMXlib DLL.

import clr 
clr.AddReferenceToFileAndPath("PMX\PMXlib.dll") 
from PMXlib import PMX 
#PMXlib is the namespace name. PMX is the class name inside the DLL. 
+0

Selon http://msdn.microsoft.com/en-us/library/17k74w0c.aspx, « Parce que les bibliothèques de classes ne disposent pas d'un point d'entrée, leur seule option pour cette propriété est (Aucun). " Y a-t-il une différence entre le fichier de démarrage auquel vous faites référence et l'objet de démarrage dans VS2010? – ravi77o

+0

C'est ce que je voulais dire: http://imgur.com/RbeZY.png Comme vous pouvez le voir, 'app.py' est mon fichier de démarrage actuel (il a une icône verte dessus) et je peux changer le fichier de démarrage par un clic droit sur un autre fichier. Cela change simplement quel fichier .py est envoyé à ipy.exe pour démarrer votre programme. – Aphex

+0

J'ai remarqué que vous faites référence au fait que vous créez une bibliothèque de classes (probablement pour être utilisée à partir d'autres applications). Dans ce cas, voyez si vous pouvez utiliser la DLL du même dossier que la bibliothèque de classes. – Aphex

Questions connexes