【问题标题】:Why can't IronPython find my VS2010 VB.Net class library DLL为什么 IronPython 找不到我的 VS2010 VB.Net 类库 DLL
【发布时间】:2010-10-19 16:17:52
【问题描述】:

我在 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) 时出现以下错误。该文件确实存在于我的计算机上。

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

【问题讨论】:

    标签: vb.net visual-studio-2010 ironpython


    【解决方案1】:

    使用启动文件的相对路径。这是一个例子:

    在我的一个项目中,启动文件(在您的解决方案资源管理器中具有绿色“播放”图标的那个)位于一个文件夹中,其中包含另一个文件夹 PMXPMX 文件夹内是我试图访问的 DLL。该 DLL 中有 PMXlib 命名空间。 PMXlib 命名空间有一个名为“PMX”的类。 所以,目录结构如下:

    PMX\
        PMXlib.dll
    main.py
    

    这是我用来访问PMXlib DLL 中的PMX 类的代码。

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

    【讨论】:

    • 根据msdn.microsoft.com/en-us/library/17k74w0c.aspx,“因为类库没有入口点,所以它们对该属性的唯一选择是(无)。”你说的启动文件和VS2010中的启动对象有区别吗?
    • 这就是我的意思:imgur.com/RbeZY.png 如您所见,app.py 是我当前的启动文件(上面有一个绿色图标),我可以通过右键单击任何启动文件来更改启动文件其他文件。这仅仅改变了发送到 ipy.exe 以启动您的程序的 .py 文件。
    • 我注意到你指的是你正在制作一个类库(大概是为了从其他应用程序中使用)。在这种情况下,看看您是否可以使用与类库相同的文件夹中的 DLL。
    • 我正在尝试从与“DumbLib.dll”相同的父目录中进行 clr.AddReferenceToFill("DumbLib.dll"),但我得到 System.IO.IOException:无法添加对程序集 DumbLib 的引用.dll。 (顺便说一句,感谢您的帮助!我不是 VB 或 .Net 开发人员,所以我的术语可能不正确)
    猜你喜欢
    • 1970-01-01
    • 2012-05-17
    • 1970-01-01
    • 2011-06-24
    • 2010-11-26
    • 2011-10-07
    • 2012-06-22
    • 2011-07-08
    • 2012-08-24
    相关资源
    最近更新 更多