当前位置:  开发笔记 > 编程语言 > 正文

是否可以序列化C#代码块?

如何解决《是否可以序列化C#代码块?》经验,为你挑选了2个好方法。

我正在使用C#和.NET 3.5.是否可以序列化一段代码,将其传输到某处,对其进行反序列化,然后执行它?

一个示例用法是:

Action pauxPublish = delegate(object o)
{
    if (!(o is string))
    {
        return;
    }
    Console.WriteLine(o.ToString());
};
Transmitter.Send(pauxPublish);


有些远程程序在做:

var action = Transmitter.Recieve();
action("hello world");

我的最终目标是能够在不同的进程中执行任意代码(它没有代码的先验知识).



1> Brian Genisi..:

是!!!

我们这样做是为了一个非常真实的表现.由于性能原因,在运行时或使用DSL执行此操作不是一种选择.

我们将代码编译成程序集,并将IL从方法中删除.然后,我们获取与此方法相关的所有元数据,并通过XML序列化整个混乱,压缩它,并将其放入我们的数据库中.

在重新水化时,我们使用DynamicMethod类重新构建IL和元数据,然后执行它.

我们这样做是因为速度快.我们有成千上万的小代码块.不幸的是,编译一段代码并在运行中运行它需要至少250毫秒,这对我们来说太慢了.我们采用了这种方法,它的工作非常好.在运行时,重新构建方法并运行它需要不可测量的时间.

唯一值得关注的是......签名的程序集和无符号程序集不能混合序列化的方法数据.


如果你所做的事情令人惊讶或糟糕,我无法下定决心.可能两者都有.

2> Toni Ruža..:

您可以尝试在项目中使用IronPython.这是微不足道的,做你问在Python什么.Python代码可以调用您的C#方法.至于安全性,您可以在某种受限制的环境中执行代码(例如RestrictedPython).

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有