1
3
检查Microsoft.CSharp.CSharpCodeProvider和System.CodeDom.Compiler周围的命名空间。
应该是非常直截了当的 http://support.microsoft.com/kb/304655
一点也不。只是名字而已。
加载您创建的程序集,如assembly.load等。使用反射查询要声明的类型。获取构造函数并调用它。 |
2
4
现在有了一个相当优雅的解决方案,(a)在.NET 4.0中有了一个新功能,(b)Roslyn。 可回收程序集
在.NET 4.0中,可以指定
香草味.net 4.0,i 认为 您需要通过在原始IL中编写方法来填充动态程序集。 罗斯林输入roslyn:roslyn允许您将原始C代码编译为动态程序集。这是一个例子,灵感来自这两个 blog posts ,更新以使用最新的Roslyn二进制文件:
总之:使用可收集的程序集和Roslyn,您可以将C代码编译成可以加载到
|
3
1
好吧,你想在飞行中编辑东西,对吗?这是你的目标,不是吗? 当您编译程序集并加载它们时,现在有了卸载它们的方法,除非您卸载AppDomain。 可以使用assembly.load方法加载预编译的程序集,然后通过反射调用入口点。 我将考虑动态装配方法。通过当前的AppDomain,您表示要创建动态程序集。这就是DLR(动态语言运行时)的工作原理。使用动态程序集,可以创建实现某些可见接口的类型,并通过该接口调用它们。使用动态程序集的背面是您必须自己提供正确的IL,您不能简单地用内置的.NET编译器生成它,但是,我敢打赌Mono项目有一个您可能想要签出的C编译器实现。他们已经有了一个C解释器,该解释器读取C源文件并编译并执行它,这肯定是通过system.reflection.emit API处理的。 不过,我不确定这里的垃圾收集,因为当涉及到动态类型时,我认为运行时不会释放它们,因为它们可以在任何时候被引用。只有当动态程序集本身被销毁并且不存在对该程序集的引用时,才可以释放该内存。如果您正在并且正在生成大量代码,请确保在某个时刻内存是由GC收集的。 |
4
0
如果语言是Java,答案就是使用JRealEL。既然不是这样,答案就是提高足够的噪音来显示对这个的需求。它可能需要某种类型的替代clr或“c引擎项目模板”和vs-ide协调工作等。 我怀疑有很多情况下,这是“必须的”,但有很多情况下,它将节省大量的时间,因为你可以摆脱较少的基础设施和更快的周转时间的东西,不会长期使用。(是的,有些人会争论过度设计的事情,因为它们将被使用20年以上,但问题是当你需要做一些巨大的改变时,它可能会像从头开始重建整个东西一样昂贵。所以归根结底是现在还是以后花钱。由于不确定项目稍后是否会成为业务关键型项目,并且可能需要进行较大的更改,所以我的观点是使用“kiss”原则,并具有在IDE、CLR/运行时等环境中进行实时编辑的复杂性,而不是将其构建到以后可能有用的每个应用程序中。当然,需要一些防御性的编程和实践来使用这种特性修改一些实时服务。就像传说中的二郎开发者所做的那样) |
daniel451 · 从源代码编译Python:多线程测试? 6 年前 |
mbalug · 为ARM编译c++源代码 6 年前 |
SuzLy · 使用flex编译简单令牌标识符 6 年前 |
user8659414 · Make无法识别我的库! 6 年前 |
Farzad · 序列化CUfunction对象 6 年前 |
Jersey · C++:何时需要重新编译有问题? 6 年前 |