c# - Roslyn/CSharpScript - 如何保存/加载编译以避免编译等待时间

标签 c# scripting roslyn

我正在尝试将 C# 脚本集成到我的数据库应用程序中。我正在使用 globals 对象使脚本可以访问全局变量。

如果脚本是第一次编译,我对等待时间不满意。
如何保存和加载编译以避免等待时间?

Script<object> script = CSharpScript.Create(scriptCode, globalsType: typeof(MyGlobals));
script.Compile();   //<-- load the Compilation from database/file here
script.RunAsync(myGlobalsInstance).Wait();

最佳答案

可以创建一个CSharpScript,然后通过GetCompilation获取编译,获取编译。

var script = CSharpScript.Create("script..");
var compilation = script.GetCompilation();

从编译中,您实际上可以compilation.Emit()将dll和pdb复制到磁盘或内存中。棘手的(和 roslyn 内部位)是如何让代码的委托(delegate)在您拥有程序集后执行。可以看看roslyn是怎么做的here .

关于c# - Roslyn/CSharpScript - 如何保存/加载编译以避免编译等待时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39466788/

相关文章:

c# - 在后面的代码中找出哪个页面使用用户控件

c# - 如何在没有互操作程序集的情况下将任何文件类型嵌入到 Microsoft Word 中

linux - shell 脚本 : How if condition evaluates true or false

groovy - 将 Jmeter JSR223 脚本存储在变量中

c# - Roslyn - CSharpCompilation

c# - 我可以在带有 .NET 4.7 的 Visual Studio 2017 中使用 "Roslyn"吗?

c# - 从容器中取出零件时的处理

c# - MSIL有ROL和ROR指令吗?

powershell - 使用 powershell 处理字符串中的变量

asp.net-mvc - VS 2015、C# 6、MVC5、Roslyn — Azure Web 应用程序上出现 502 网关错误