Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Iron Python脚本中加载可移植的.NET库?_Python_.net_Portable Class Library - Fatal编程技术网

如何在Iron Python脚本中加载可移植的.NET库?

如何在Iron Python脚本中加载可移植的.NET库?,python,.net,portable-class-library,Python,.net,Portable Class Library,从Python脚本加载可移植的.NET库(在标准的.NET和Silverlight环境中使用)时遇到了严重的问题 .NET DLL文件版本为4.0.3.319.233(System.Core.DLL),IronPython为2.7.1,在32位/x86模式下运行。Visual Studio 2010与.NET 4下的C#。还安装了用于便携库使用的Microsoft.NET更新KB2468871(版本2) 如果我尝试从Python脚本加载库: clr.AddReferenceToFileAndPa

从Python脚本加载可移植的.NET库(在标准的.NET和Silverlight环境中使用)时遇到了严重的问题

.NET DLL文件版本为4.0.3.319.233(System.Core.DLL),IronPython为2.7.1,在32位/x86模式下运行。Visual Studio 2010与.NET 4下的C#。还安装了用于便携库使用的Microsoft.NET更新KB2468871(版本2)

如果我尝试从Python脚本加载库:

clr.AddReferenceToFileAndPath(UsedPath+"\\MyNamespace\\MyPortableLibrary.dll")
它无法访问,当脚本达到某个类型时,它会显示: “名称空间#”的属性[type in portable assembly]为只读” 表示程序集根本没有加载(或作为Silverlight加载,并且不能由Python脚本使用)

将代码更改为:(来自System.Reflection的程序集类)

导致错误: 异常。发生IOError 消息:[Errno 2]无法加载文件或程序集'System.Core,Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e,Retargetable=Yes'或其依赖项之一。系统找不到指定的文件

当Python脚本从另一个.NET程序中自动调用时,最后一段代码似乎是有效的,它实例化了自己的Python引擎,但当脚本从Visual Studio中的Python项目执行时,会出现上述错误。VisualStudio中的Python设置、Tools\Options\Python Tools\解释器选项适用于x86/32位模式。所有环境参数都表明使用了.NET 4

我现在有多种方法可以从C#/.NET生成的Python引擎中修复它,但是如何在基本的IronPython运行时环境中加载可移植程序集,使其在正确的.NET 4环境中工作,而不尝试加载任何.NET 2内容呢

更新:
在MS KB2468871更新之后,我重新启动并重建了我的便携库,还卸载了IronPython和用于VS的Python工具,代之以版本2.7.3和1.5(VS2010)。“System.Core,Version=2.0.5.0”的错误仍然存在。

使用sys.path向.net DLL所在的位置添加路径:

import sys
sys.path.append("c:\MyDotNetDir");

import clr
clr.AddReference("MyDotNetAssembly.dll")

# do not forget to import the namespace

import Erik.MyDotNetAssemblyNamespace

inst = Erik.MyDotNetAssemblyNamespace.MyDotNetObject()

FileNotFoundException表示正在使用Assembly.LoadFile而不是Assembly.LoadFrom加载程序集,但未正确处理程序集策略。我不确定Visual Studio中的Python代码是如何工作的,但如果您能够在加载可移植程序集之前运行任何引导程序代码,请尝试我在此处展示的代码:
.

当FileNotFoundException似乎缺少程序集时,可移植库引用将被特殊处理,此异常表示有人错误地加载了我们。您找到解决此问题的方法了吗?我已经面对这两天了,我无法让它工作。
import sys
sys.path.append("c:\MyDotNetDir");

import clr
clr.AddReference("MyDotNetAssembly.dll")

# do not forget to import the namespace

import Erik.MyDotNetAssemblyNamespace

inst = Erik.MyDotNetAssemblyNamespace.MyDotNetObject()