Почему IronPython не может найти мою библиотеку библиотек классов VS2010 VB.Net - PullRequest
2 голосов
/ 19 октября 2010

Я создал проект библиотеки классов в Visual Studio 2010 и создал добавленный следующий класс VB.Net:

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

Я построил решение и сгенерировал файл DLL (скажем, PATH_TO_NEW_DLL).

В IronPython я получаю сообщение об ошибке ниже при попытке clr.AddReferenceToFileAndPath (PATH_TO_NEW_DLL). Файл DOES существует на моем компьютере.

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()

1 Ответ

1 голос
/ 19 октября 2010

Используйте относительный путь к вашему файлу запуска.Вот пример:

В одном из моих проектов файл запуска (тот, у которого в обозревателе решений есть зеленый значок воспроизведения) находился в папке, в которой находилась другая папка PMX.Внутри папки PMX была DLL, к которой я пытался получить доступ.Эта DLL содержала пространство имен PMXlib.Пространство имен PMXlib имело класс "PMX".Итак, структура каталогов следующая:

PMX\
    PMXlib.dll
main.py

Это код, который я использовал для доступа к классу PMX внутри 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.
...