首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mono.CSharp (编译器即服务) 2.10版中的更改

Mono.CSharp (编译器即服务) 2.10版中的更改
EN

Stack Overflow用户
提问于 2012-04-25 17:43:47
回答 2查看 2.2K关注 0票数 1

我在Ubuntu 11.10上运行Mono版本2.10。我正在尝试运行http://blog.davidebbo.com/2012/02/quick-fun-with-monos-csharp-compiler-as.html上提供的示例,但它似乎针对的是不同版本的mono。例如,Compile是Evaluator上的一个静态方法。我对他的示例做了以下更改,但没有使其正常工作。有没有人能提供正确的更改,有没有人知道关于Mono.CSharp的API更改的信息?我的编译器报告的版本如下:

代码语言:javascript
复制
$ dmcs --version
Mono C# compiler version 2.10.5.0

我使用以下命令行编译了以下代码:

dmcs -r:Mono.CSharp Sample.cs

并在编译时收到此警告。

代码语言:javascript
复制
dmcs -r:Mono.CSharp Sample.cs
Sample.cs(26,17): warning CS0219: The variable `compiledMethod' is assigned but its value is never used
Compilation succeeded - 1 warning(s)

这是运行代码的结果:

代码语言:javascript
复制
$ ./Sample.exe 
{interactive}(2,40): error CS1525: Unexpected symbol `namespace', expecting `end-of-file' or `using'
{interactive}(4,70): error CS0101: The namespace `UserCode' already contains a definition for `Foo'
{interactive}(4,70): (Location of the symbol related to previous error)

这是我到目前为止所掌握的代码:

代码语言:javascript
复制
using System;
using System.IO;
using Mono.CSharp;
using System.Reflection;

namespace Sample
{
    public interface IFoo { string Bar(string s); }

    class Program
    {
        const string code = @"
            using System;
            namespace UserCode
            {
                public class Foo : Sample.IFoo
                {
                    public string Bar(string s) { return s.ToUpper(); }
                }
            }
        ";

        static void Main(string[] args)
        {
            Mono.CSharp.Evaluator.Init(new string[] {} );
            Evaluator.ReferenceAssembly(Assembly.GetExecutingAssembly());

            var compiledMethod = Evaluator.Compile(code);

            for (;;)
            {
                string line = Console.ReadLine();
                if (line == null) break;

                object result;
                bool result_set;
                Evaluator.Evaluate(line, out result, out result_set);
                if (result_set) Console.WriteLine(result);
            }
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-26 18:57:11

根据这个:http://www.mono-project.com/Release_Notes_Mono_2.12#Instance_API,静态/全局赋值器是较旧的接口,实例接口是较新的接口。我拥有的Mono是当前的稳定版本(2.10),版本2.11附带的Mono.CSharp具有实例方法。2.12看起来还没有发布。

下面是对编译器的instance API as a service的另一个提法:http://tirania.org/blog/archive/2011/Oct-14.html

票数 1
EN

Stack Overflow用户

发布于 2012-04-28 04:02:42

Mono 2.10附带了仅支持表达式和语句的赋值器。您的代码包含Mono 2.10不支持的类型声明。

Mono 2.11或git master Mono.CSharp支持类型声明和其他高级功能。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10313104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档