简体   繁体   中英

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

I'm trying to do a simple hello world to test out embedding IronPython within C# but can't seem to resolve this problem..

This is my C# file;

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

And this is the python class;

import sys

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

My target .NET framework is 4.0 and I'm using IronPython 2.6..

I get 2 errors when I run this one is from a file called "CSC"; Error 5 Missing compiler required member

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

The other one is from C# file i created

Error 6 One or more types required to compile a dynamic expression cannot be found. Are you missing a reference? C:\\Users\\Tolga\\documents\\visual studio 2012\\Projects\\WindowsFormsApplication1\\consoleTest\\Program.cs 17 9 consoleTest

Here's the output from the Build

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 ==========

You need to add a reference to Microsoft.CSharp.dll . This provides the required types for using dynamic in C#.

Also, you will likely need to upgrade to IronPython 2.7[.3] or later, as there are some incompatibilities with old releases and the newer .NET frameworks.

You will also get this error if you've included references to the wrong target assemblies . For instance, if you're building against the .Net 4.0 Full profile, you must include the IronPython assemblies from:

<install directory>\IronPython 2.7\Platforms\Net40

Including assemblies from the Net35 directory will also result in the missing RuntimeBinder error.

Very old question for a still existing issue I've faced this morning using IronPython 2.7.10 in a new project.

The accepted answer can now be improved : instead of manually adding Microsoft.CSharp.dll, I would recommend adding the package "Microsoft.CSharp" from nuget. Portability will be improved (netstandard, net framework, netcore...).

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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