繁体   English   中英

在 C# 中嵌入 IronPython 的问题(缺少编译器所需的成员“Microsoft.CSharp.RuntimeBinder.Binder.InvokeMember”

[英]Problems embedding IronPython in C# (Missing Compiler required member 'Microsoft.CSharp.RuntimeBinder.Binder.InvokeMember'

我正在尝试做一个简单的 hello world 来测试在 C# 中嵌入 IronPython,但似乎无法解决这个问题..

这是我的 C# 文件;

using System;
using IronPython.Hosting;
using Microsoft.Scripting;
using Microsoft.Scripting.Hosting;
using System.IO;

public class dynamic_demo
{
    static void Main()
    {
        var ipy = Python.CreateRuntime();

        dynamic test = ipy.UseFile(@"../../Test.py");

        test.Simple();
    }
}

这是python类;

import sys

def Simple():
    print 'Hello from Python'
    print "Call Dir(): "
    print dir()
    print "Print the Path: " 
    print sys.path

我的目标 .NET 框架是 4.0,我使用的是 IronPython 2.6 ..

当我运行这个错误来自一个名为“CSC”的文件时,我得到 2 个错误; 错误 5 缺少编译器所需的成员

'Microsoft.CSharp.RuntimeBinder.Binder.InvokeMember' C:\\Users\\Tolga\\documents\\visual studio 2012\\Projects\\WindowsFormsApplication1\\consoleTest\\CSC consoleTest

另一个来自我创建的 C# 文件

错误 6 无法找到编译动态表达式所需的一种或多种类型。 你缺少参考吗? C:\\Users\\Tolga\\documents\\visual studio 2012\\Projects\\WindowsFormsApplication1\\consoleTest\\Program.cs 17 9 consoleTest

这是构建的输出

1>------ Build started: Project: consoleTest, Configuration: Debug Any CPU ------
1>CSC : warning CS1685: The predefined type 'System.Runtime.CompilerServices.CallSite' is defined in multiple assemblies in the global alias; using definition from 'c:\Program Files (x86)\IronPython 2.6\Microsoft.Scripting.Core.dll'
1>CSC : warning CS1685: The predefined type 'System.Runtime.CompilerServices.CallSite' is defined in multiple assemblies in the global alias; using definition from 'c:\Program Files (x86)\IronPython 2.6\Microsoft.Scripting.Core.dll'
1>CSC : warning CS1685: The predefined type 'System.Runtime.CompilerServices.CallSiteBinder' is defined in multiple assemblies in the global alias; using definition from 'c:\Program Files (x86)\IronPython 2.6\Microsoft.Scripting.Core.dll'
1>CSC : warning CS1685: The predefined type 'System.Runtime.CompilerServices.ExtensionAttribute' is defined in multiple assemblies in the global alias; using definition from 'c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll'
1>CSC : error CS0656: Missing compiler required member 'Microsoft.CSharp.RuntimeBinder.Binder.InvokeMember'
1>C:\Users\Tolga\documents\visual studio 2012\Projects\WindowsFormsApplication1\consoleTest\Program.cs(17,9,17,20): error CS1969: One or more types required to compile a dynamic expression cannot be found. Are you missing a reference?
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

您需要添加对Microsoft.CSharp.dll的引用。 这提供了在 C# 中使用dynamic所需的类型。

此外,您可能需要升级到 IronPython 2.7[.3] 或更高版本,因为旧版本和较新的 .NET 框架存在一些不兼容性。

如果您包含对错误目标程序集的引用,您也会收到此错误。 例如,如果您针对 .Net 4.0 Full 配置文件进行构建,则必须包含来自以下内容的 IronPython 程序集:

<install directory>\IronPython 2.7\Platforms\Net40

包括来自Net35目录的程序集也会导致缺少RuntimeBinder错误。

我今天早上在一个新项目中使用 IronPython 2.7.10 遇到的一个仍然存在的问题的非常老的问题。

现在可以改进接受的答案:我建议从 nuget 添加包“Microsoft.CSharp”,而不是手动添加 Microsoft.CSharp.dll。 可移植性将得到改善(netstandard、net framework、netcore...)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM