对于scriptcs ' dynamic '不支持Roslyn,只支持mono,但mono在DLL上失败

本文关键字:mono DLL 失败 scriptcs 支持 dynamic 不支持 Roslyn 对于 | 更新日期: 2023-09-27 18:11:54

我尝试从scriptcs加载pythonnet运行时dll,它不与roslyn后端一起工作,因为roslyn不支持动态,但mono后端阻塞了以下错误:

$ scriptcs -modules mono
scriptcs (ctrl-c to exit or :help for help)
> #r "F:'Python'Python27'Lib'site-packages'Python.Runtime.dll"
error CS0009: Metadata file `F:'Python'Python27'Lib'site-packages'Python.Runtime.dll' does not contain valid metadata

问题:


我怎么能得到Mono后端脚本与Python.Runtime.DLL工作?在此之前我需要加载任何dll吗?是否Python.Runtime.DLL必须与Mono支持或。net编译是好的?

对于scriptcs ' dynamic '不支持Roslyn,只支持mono,但mono在DLL上失败

这个错误(CS0009与单编译器)是相当通用的,意味着给定的汇编"有问题",所以很难调试。继续进行的一种方法确实是在mono下编译。如果你下载他们的源代码(https://github.com/pythonnet),你会找到如何做到这一点的说明(看看pythonnet'src'monoclr'README.txt也)。

然而,根据你的目标,你可以考虑使用IronPython,它是由mono官方支持的,并且是开箱即用的。下面的例子假设你下载了IronPython的zip文件并将其解压到某个地方:

scriptcs -modules mono
scriptcs (ctrl-c to exit or :help for help)
> #r "G:'dev_tools'IronPython-2.7.5'IronPython-2.7.5'IronPython.dll"
> #r "G:'dev_tools'IronPython-2.7.5'IronPython-2.7.5'Microsoft.Dynamic.dll"
> #r "G:'dev_tools'IronPython-2.7.5'IronPython-2.7.5'Microsoft.Scripting.dll"
> using System;
> using System.IO;
> using IronPython.Hosting;
> using Microsoft.Scripting;
> using Microsoft.Scripting;
> using Microsoft.Scripting.Hosting;
> string script = "print 'hello world'";
> var engine = Python.CreateEngine();
> var scope = engine.CreateScope();
> var source = engine.CreateScriptSourceFromString(script, SourceCodeKind.Statements);
> var compiled = source.Compile();
> var result = compiled.Execute(scope);
hello world
>