c# - 如何从 Roslyn 脚本文件加载引用的脚本库?

标签 c# roslyn

我发现我无法轻易地从一个脚本库加载另一个脚本库:

模块.csx

string SomeFunction() {
   return "something";
}

脚本.csx

ExecuteFile("module.csx");
SomeFunction() <-- causes compile error "SomeFunction" does not exist

这是因为编译器在编译 script.csx afaiu 时不知道 module.csx。我可以添加另一个脚本来从那个脚本加载两个文件,这样就可以了。然而,这并不是那么漂亮。

相反,我喜欢让我的脚本主机在我的脚本中检查特殊语法“加载模块”,并在实际脚本执行之前执行这些模块。

脚本.csx

// load "module.csx"
SomeFunction()

现在,通过一些基本的字符串处理,我可以确定要加载哪些模块(包含//load ... 的行)并加载该文件(此处要点 https://gist.github.com/4147064):

foreach(var module in scriptModules) {
   session.ExecuteFile(module);
}
return session.Execute(script)

但是 - 因为我们在谈论 Roslyn,所以应该有一些很好的方法来解析脚本以获得我正在寻找的语法,对吧?

它甚至可能存在一种处理代码模块库的方法?

最佳答案

目前在 Roslyn 中无法引用另一个脚本文件。我们正在考虑将 #load 从交互窗口的主机命令移动到语言的一部分(如 #r),但目前尚未实现。

至于如何处理字符串,你可以正常解析它,然后寻找未知类型的预处理器指令并以此方式深入结构。

关于c# - 如何从 Roslyn 脚本文件加载引用的脚本库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13556859/

相关文章:

C#如何连接公网ip

c# - 为什么 Debug 构建中的 C# JIT 汇编代码中的每个方法中都有 cmp + je

c# - 为什么接口(interface)在 IL 级别作为 "abstract interface"发出?

c# - COM 对象上的扩展方法不好吗?

c# - Linux 上的 MonoDevelop 失败 "Unknown MSBuild Failure"

c# - 如何查找Skydrive文件夹的文件夹ID

c# - Roslyn - 在另一个 TypeInfo 中获取类型参数的 TypeInfo

c# - 无法加载文件或程序集 'System.Collections.Immutable' 但我没有任何引用

c# - Roslyn AddDocument 到项目并将此更改保存到实际解决方案文件

c# - C# 中的快速傅立叶变换