【发布时间】:2013-05-08 14:03:27
【问题描述】:
我在从 Python 脚本加载可移植 .NET 库(用于标准 .NET 和 Silverlight 环境)时遇到严重问题。
.NET DLL 文件版本为 4.0.3.319.233 (System.Core.DLL),IronPython 为 2.7.1,运行在 32bit/x86 模式。 Visual Studio 2010 和 .NET 4 下的 C#。还安装了 Microsoft .NET 更新 KB2468871 以供便携式库使用(版本 2)。
如果我尝试从 Python 脚本加载库:
clr.AddReferenceToFileAndPath(UsedPath+"\\MyNamespace\\MyPortableLibrary.dll")
它不能被访问,当脚本到达一个类型时,它会说: “'namespace#' 的属性 [可移植程序集中的类型] 是只读的” 表示程序集根本没有被加载(或作为 Silverlight,并且不能被 Python 脚本使用)。
将代码更改为:(System.Reflection 中的程序集类)
PortableAssembly = Assembly.LoadFrom(UsedPath+"\\MyNamespace\\MyPortableLibrary.dll") # load through .NET Reflection, Python won't load Portable assembly properly!
clr.AddReference(PortableAssembly)
导致错误: exceptions.IOError 发生 消息:[Errno 2] 无法加载文件或程序集“System.Core,版本=2.0.5.0,文化=中性,PublicKeyToken=7cec85d7bea7798e,可重定位=是”或其依赖项之一。系统找不到指定的文件。
最后一个代码似乎可以工作,当从另一个 .NET 程序中自动调用 Python 脚本时,实例化它自己的 Python 引擎,但是当脚本从 Visual Studio 中的 Python 项目执行时出现上述错误。 VisualStudio 中的 Python 设置,Tools\Options\Python Tools\Interpreter Options 适用于 x86/32 位模式。所有环境参数都显示使用了 .NET 4。
我现在有多种方法可以从 C#/.NET 生成的 Python 引擎修复它,但是如何在基本 IronPython 运行时环境中加载可移植程序集,以便它在正确的 .NET 4 环境中工作,不尝试加载任何 .NET 2 的东西?
更新: 在 MS KB2468871 更新后,我重新启动并重建了我的便携式库,还卸载了 VS 的 IronPython 和 Python 工具,将它们替换为 2.7.3 和 1.5 (VS2010) 版本。 'System.Core, Version=2.0.5.0' 的错误仍然出现。
【问题讨论】:
-
您找到解决此问题的方法了吗?我现在面临这个问题 2 天,但我无法让它工作。
标签: python .net portable-class-library