问题标签 [runtime-compilation]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - 从内存中的文件编译 c# 代码
我想将我的代码从文件直接编译到内存中(Runtime-Compilation或RunPE 方法)。
这是我使用的代码:
这将使我在调试中没有错误,但也无法正常工作。只是在调试输出时我看到了这个:
加载“3kp0asrw”。模块是在没有符号的情况下构建的。
其他的看起来还不错。
这是code.txt文件中的代码,假设只需编写 3 行文本并在控制台中显示一条消息:
问题:我在这里缺少什么?您是否知道直接在内存中从文件或源代码运行代码的任何其他方法(AKA RunPE 方法)?你能给我一个简单的例子吗?
注意:我想为更大的代码执行此操作并将其自动化以供以后使用,就像 .net crypters 在存根文件中所做的那样,无需每次都指定类名和...。可能吗?
vb.net - 发布动态编译VB代码
当我使用CodeDom编译 VB 代码时,我不需要为系统引用指定完全限定的路径。例如:
按预期工作。
但是当我使用 roslyn 做同样的事情时,它期望我给出一个完全合格的路径。例如:
正在引发异常。
我无法弄清楚 Codedom 如何获得系统引用的完全限定路径。
vb.net - 使用带有 roslyn 的“My.Computer”的问题
我正在尝试使用 Roslyn 编译 VB 代码。一些文件使用我的参考,例如:
编译代码时出现错误:
错误 BC30456:“计算机”不是“我”的成员。
我不确定我错过了什么。我确实创建了一个MetaDataReference
to Microsoft.VisualBasic.dll
。
vb.net - Roslyn 比 CodeDom 慢
我正在使用 Roslyn 使用磁盘上的许多 VB 文件生成运行时 dll。我首先从所有这些文件创建语法树,然后使用它们来创建 VBCompilation 并发出程序集。整个过程大约需要 10 分钟。创建语法树占用了很大一部分时间。如果我使用 CodeDom 编译文件,大约需要 3 分钟。有没有办法让 Roslyn 更快地编译文件?
c# - 从 Roslyn 编译中获取特定于文化的错误
我正在尝试使用Roslyn Emit Api 编译一些语法不正确的代码。编译代码的线程将 Culture 设置为“fr-Fr”,但我从 Roslyn api 获得的诊断消息是英文的。例如
错误 BC30037:字符无效。
我想知道是否有办法在线程特定的文化中获取错误消息。codeDom 也是如此。
roslyn - 使用 Roslyn 在运行时编译多个程序集
我正在尝试在运行时创建多个程序集。我正在使用 Roslyn 串行编译每个程序集。
我无法利用多线程,因为 Roslyn 在内部使用多线程来编译单个 dll。使用 Roslyn 编译单个 dll 的时间比使用 CodeDom 的要少,但是由于使用 CodeDom 我可以并行编译多个 dll,因此 CodeDom 的实际时间要少得多。
我尝试将 Roslyn 编译的并发构建选项设置为 false,然后在我的代码中使用多线程,但这也效率不高,因为现在单个 dll 的编译时间更长。我想知道是否有解决此问题的方法
时序分析更新:
我有一个 8 核处理器。我在磁盘上有不同的文件集用于编译 72 个 dll。
在第一种情况下,我从文件创建语法树,创建引用,创建选项并使用 Emit 使用简单foreach
循环以串行方式为每个 dll 编译 dll。总耗时 488589 ms
在第二种情况下,我使用parallel.ForEach
withMaxDegreeOfParallelism = 7
并创建语法树、创建引用、创建选项并在循环中使用 Emit 编译 dll。总耗时 514481 ms
在这两种情况下,并发构建选项都是默认的:True。
如您所见,使用多线程时没有观察到任何收益。
java - 如何在调用 .class 文件时在运行时提供外部 jar
我试图在运行时在 eclipse 中编译和运行一个 java 类,它使用一个外部 jar 示例:在这种情况下是 JSON 库。
我已经成功编译了 java 代码,但是当我尝试调用该方法时,它给了我以下错误java.lang.reflect.InvocationTargetException
当我将所需的 jar 添加到 eclipse 的构建路径时,它工作正常。我不想将 jar 添加到 eclipse 的 buildPath,因为它需要从外部路径加载 jar 以及构建eclipse中提供的路径。
在运行时在 JAVACompiler 中调用包含外部 jar 的类时,有什么方法可以添加外部 jar 路径?
请在这个问题上帮助我。
这是要在运行时编译和运行的具有外部 jar 的类。
这是我正在运行以编译 JSONPRINTERCLASS 的类
最后是@AL4建议的更改后的代码
但我仍然得到
java.lang.Error:未解决的编译问题:JSONArray 无法解析为类型 JSONArray 无法解析为类型 JSONObject 无法解析为类型 JSONObject 无法解析为 JSONPRINTERCLASS.printJson(JSONPRINTERCLASS.java:20) 处的类型JSONPRINTERCLASS.(JSONPRINTERCLASS.java:7) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ) 在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) 在 java.lang.Class.newInstance(Class.java:442) 在 StackInLineCompiler.main(StackInLineCompiler.java:137)
请帮忙
c# - 使用 Roslyn 解析运行时生成类型的 lambda 表达式
我正在尝试使用 Roslyn 作为解析用户在运行时使用通用格式提供的 lambda 表达式的一种方式:
然后调用者提供code
类似P => P.Property > 5
. 当我为 T 使用众所周知的类型时,这一切都很好,但我希望允许用户使用更多动态类型,每个用户都可以定义自己的一组属性(带有类型)。同步表达式树不支持动态类型(因此 Roslyn 不能这样编译),我希望允许用户定义他们的属性并且我会动态生成运行时类型。
我遇到的问题是,在创建运行时类型之后,我没有用于T
in的具体类型.ContinueWith<Expression<Func<T,bool>>>
。
我已经使用完整的反射做类似的事情:
但这会引发异常:
Microsoft.CodeAnalysis.Scripting.CompilationErrorException:错误 CS0400:类型或命名空间名称 'System.Linq.Expressions.Expression
1[[System.Func
2[[Submission#1+Person,ℛ*907cf320-d303-4781-926e-cee8bf1d3aaf#2-1,版本=0.0.0.0, Culture=neutral, PublicKeyToken=null],[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken =b77a5c561934e089]], System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' 在全局命名空间中找不到(您是否缺少程序集引用?)
在这种情况下,Person
运行时类型的名称在哪里(我认为它在抱怨什么)。
我已经尝试将类型所在的程序集显式添加到ScriptOptions
使用中:
但这失败了:
System.NotSupportedException:无法创建对没有位置的程序集的元数据引用。
我正在尝试做的事情可能吗?
c# - C# - 从用户输入字符串动态创建函数体
我正在尝试创建一个 C# 程序,让用户通过在文本框中输入文本来为函数提供实现。我提供了函数头(输入类型,输出类型),他们只需要提供实际的实现。然后我存储该函数以供以后调用。他们可能需要从 .NET 框架导入一些东西,但在它之外什么都不需要。
我不关心安全性,这只是供内部使用的工具。
在 .NET 中是否有一种简单的方法可以做到这一点?
用法看起来像(需要实现 CompileUserFunction 函数,该函数接受一个 int 并返回一个对象):
c++ - C++ 让程序自己改写
几天前(和几年前)我发布了一个关于类似主题的问题,但我决定继续开始。我正在尝试将 C++ 代码注入 C++ 代码(以某种可移植的方式,不使用操作系统特定的功能,并尝试以独立于编译器/工具链的方式)。我基本上想这样做是为了尝试执行运行时 C++ 脚本。我写了一个小测试程序(它真的有点拼凑和hacky):Main.cpp:
源.cpp:
基本上我试着用 malloc 和 new 分配一大块内存,但我想也许我可以覆盖已经专用于进程内存的内存(这就是为什么我有cmpp指向的函数测试并尝试覆盖它)。但是我收到写访问错误。我看了一下这篇文章,从其中一个答案看来,可以在没有访问冲突的情况下覆盖程序自己的内存(这是我想要做的),错误不少。有人可以详细说明一下,并告诉我如何在不使用任何非标准功能(或至少一个可以/被抽象掉的功能)的情况下以某种可移植的方式做到这一点吗?