fos*_*ndy 2 c# compiler-construction mono
我的印象是Mono的编译器可以在Microsoft.NET中使用
编辑:更新的博客发布在这里,我最初错过了解释其中一些(与贾斯汀的答案一致)
我创建了一个简单的类来尝试使用它
[TestFixture]
class Class1
{
[Test]
public void EXPR()
{
Evaluator.Run("using System;");
int sum = (int)Evaluator.Evaluate("1+2");
}
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio 2010中引用C:\ Program Files(x86)\ Mono-2.10.1\lib\mono\4.0\Mono.CSharp.dll的项目.
但是,当我尝试运行此任务时,我在Evaluator.Run调用时抛出以下异常:
System.TypeInitializationException was unhandled by user code
Message=The type initializer for 'Mono.CSharp.Evaluator' threw an exception.
Source=Mono.CSharp
TypeName=Mono.CSharp.Evaluator
StackTrace:
at Mono.CSharp.Evaluator.Run(String statement)
at Experiments.Class1.EXPR() in W:\Experiments\Class1.cs:line 16
InnerException: System.TypeLoadException
Message=Method 'Mono.CSharp.Location.ToString()' is security transparent, but is a member of a security critical type.
Source=Mono.CSharp
TypeName=Mono.CSharp.Location.ToString()
StackTrace:
at Mono.CSharp.Evaluator..cctor()
InnerException:
Run Code Online (Sandbox Code Playgroud)
谷歌确认另一个人问这个问题,但没有回答.我试图开始阅读有关安全透明代码的微软文章,但很快就感到困惑.有人能够建议一个快速的解决方法,让我使用它吗?并且可能总结一下安全隐患(如果有的话)(在我的情况下 - 将来我希望用厚客户端应用程序打包它,以便在内部和最终用户使用)
自去年 4月以来,它一直在.NET下工作.
小点,但我注意到你的表达中缺少一个分号sum.
int sum = (int)Evaluator.Evaluate("1+2;");
我目前只有Mono 2.11(来自git),他们已经改为使用编译器的多实例版本而不是静态版本.所以,我的代码看起来有点不同:
using System;
using Mono.CSharp;
namespace REPLtest
{
class MainClass
{
public static void Main (string[] args)
{
var r = new Report (new ConsoleReportPrinter ());
var cmd = new CommandLineParser (r);
var settings = cmd.ParseArguments (args);
if (settings == null || r.Errors > 0)
Environment.Exit (1);
var evaluator = new Evaluator (settings, r);
evaluator.Run("using System;");
int sum = (int) evaluator.Evaluate("1+2;");
Console.WriteLine ("The sum of 1 + 2 is {0}", sum);
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:我想我应该确认我确实在.NET 4上成功执行了此操作(在Windows XP上使用Visual C#Express 2010)
再次编辑:如果您有Visual Studio,可以下载最新版本的Mono.CSharp并自行编译.源中包含.sln(解决方案文件),因此您可以在没有Mono的Windows上构建它.生成的程序集将运行上面的代码.Miguel 在这里有一篇解释新Mono.CSharp的帖子.
最后编辑:我上传,我实际使用的编译Mono.CSharp.dll装配在这里.将其作为编译上述代码的参考.
| 归档时间: |
|
| 查看次数: |
3784 次 |
| 最近记录: |