我正在尝试做一个简单的hello世界来测试在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 ..
我运行此错误时遇到2个错误来自名为“CSC”的文件; 错误5缺少编译器所需的成员
'Microsoft.CSharp.RuntimeBinder.Binder.InvokeMember'C:\ Users \ Tolga \ documents \ visual 工作室 2012 \ Projects \ WindowsFormsApplication1 \ consoleTest \ CSC consoleTest
另一个来自我创建的C#文件
错误6编译动态表达式所需的一种或多种类型 无法找到。你错过了吗? 参考? C:\ Users \ Tolga \ documents \ visual studio 2012 \ Projects \ WindowsFormsApplication1 \ consoleTest \ Program.cs 17 9 consoleTest
这是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 ==========
答案 0 :(得分:118)
您需要添加对Microsoft.CSharp.dll
的引用。这提供了在C#中使用dynamic
所需的类型。
此外,您可能需要升级到IronPython 2.7 [.3]或更高版本,因为与旧版本和较新的.NET框架存在一些不兼容。
答案 1 :(得分:3)
如果您included references to the wrong target assemblies,也会收到此错误。例如,如果您要构建.Net 4.0 Full配置文件,则必须包含以下内容的IronPython程序集:
<install directory>\IronPython 2.7\Platforms\Net40
包含Net35
目录中的程序集也会导致RuntimeBinder
错误。
答案 2 :(得分:0)
今天早上我在一个新项目中使用IronPython 2.7.10仍面临着一个仍然存在的问题,这是一个非常古老的问题。
现在可以改善公认的答案:我建议您从nuget中添加软件包“ Microsoft.CSharp”,而不是手动添加Microsoft.CSharp.dll。可移植性将得到改善(netstandard,.net框架,.netcore ...)。