如何在 IronPython 2.7 中引用针对运行时版本“v2.0.xxx”构建的程序集?

Posted

技术标签:

【中文标题】如何在 IronPython 2.7 中引用针对运行时版本“v2.0.xxx”构建的程序集?【英文标题】:How to reference an assembly which is built against version 'v2.0.xxx' of the runtime in IronPython 2.7? 【发布时间】:2019-10-31 00:22:10 【问题描述】:

我正在尝试为针对运行时版本“v2.0.50727”构建的程序集 (thirdPartyDLL) 创建包装器。但是每当我尝试在 IronPython 代码中引用它时,它总是会导致以下错误

IOError:System.IO.FileLoadException:混合模式程序集是针对运行时版本“v2.0.50727”构建的,如果没有额外的配置信息,则无法在 4.0 运行时中加载。

我的包装器只是一个类库,所以没有 app.config 或 app.exe.config。

    我尝试将库的 Target Framework 更改为 .NET Framework 2.0,但没有成功。给了我同样的错误。 甚至尝试过 http://reedcopsey.com/2011/09/15/setting-uselegacyv2runtimeactivationpolicy-at-runtime/ ,但它在 python 中不起作用并给了我以下异常

    运行时已被绑定以供旧版激活策略使用。

Python 代码非常简单

import clr
import sys
sys.path.append(r"directoryPath")
clr.AddReference(r"Test.dll")
from Test import *
testObj = testClass()
raw_input("Press enter key to continue..")

包装类库有以下内容

namespace Test

    public class testClass()
    
        public testClass()
        
            thirdPartyDLLClass tClass = new thirdPartyDLLClass();
        
    

我只想毫无例外地编译和运行 IronPython 程序。我任何人都可以建议任何我没有尝试过的新东西,那么它会很有帮助。我对 python 很陌生,但我在 C# 方面已经足够好了。

提前致谢。

【问题讨论】:

【参考方案1】:

通过更改我的 PythonApp.exe.config 文件解决了这个问题。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.x.x"/></startup>
</configuration>

如果您没有配置文件,则只需创建一个与您的 Python 应用名称同名的 .config 文件。

【讨论】:

以上是关于如何在 IronPython 2.7 中引用针对运行时版本“v2.0.xxx”构建的程序集?的主要内容,如果未能解决你的问题,请参考以下文章

IronPython for .NET 核心

如何在IronPython控制台中清除屏幕?

如何在单独的 AppDomain 中托管 IronPython 引擎?

如何在另一个 AppDomain 中运行代码?我需要沙箱我的 IronPython 代码

如何在IronPython中调用C#/ .NET命名空间?

沙盒 IronPython?