【问题标题】:Add a keyword to C# with code generation?通过代码生成向 C# 添加关键字?
【发布时间】:2013-06-12 22:59:04
【问题描述】:

我有一种特定领域的语言,我想通过添加新关键字(或一些类似关键字的语法)与 C# 进行交互。使用属性是不够的(我不能在方法体中使用它们),并且将它硬塞进“有效”的 C# 符号中,然后编译成其他东西会很丑陋,并破坏与 DSL 的类比(以及类似 DSL 的翻译) C# 的符号很重要,所以每次只写 C# 是不可能的)。

我已经有办法解析 .cs 文件并将其转换为合法的、重要的、可以编译的 C# 代码。

问题是,即使我可以完成定义 DSL、解析它并将其翻译成有效 C# 的所有工作,Visual Studio 也不会让我使用它不理解的符号;它只是添加了红色曲线,发出错误“无法解析符号”,然后经常无法正确解析之后的内容。

有没有办法强制 Visual Studio 在其分析中忽略特定字符串?我看过visual studio插件,但看起来,虽然我可以做语法高亮和其他东西,但我不能强迫它忽略它不知道如何解析的东西(除非我错过了一些方法在扩展 API 中,这当然是可能的)。

我已经浏览了 Roslyn 的东西,也没有看到一种临时的方法来做到这一点。 (同样,可能遗漏了一些东西,它似乎没有很好的文档。)

【问题讨论】:

  • 您不能强迫 VS 理解您的 C# 语法,因为它不是有效的 C# 语法。它是您的 DSL,而不是 C#。您可以更改文件的扩展名以使 VS 相信它不是 C# 文件,并为该新语言定义语法高亮插件。
  • 我不希望它理解语法——我有一个可以理解它的预构建过程。我希望它忽略语法。
  • 更改扩展名应该可以解决问题:VS 将忽略文件的语法,将其视为文本。
  • 我不希望它被视为文本,我希望它被视为有效的 C#,因为除了对 DSL 的一些引用之外,它是有效的 C#...
  • 这是我的观点:你不能让 VS 将你的代码视为有效的 C#,除非它是纯的、100% 有效的 C#。 “几乎有效”是“无效”的同义词——简单明了。当然,有一些方法可以使它有效——例如,将你的 DSL 伪装成解析器可以理解的某种特殊格式的 cmets。在这种情况下,您的语言将再次成为有效的 C#,并且 VS 不会抱怨。

标签: c# visual-studio code-generation metalanguage


【解决方案1】:

看看PowerLanguages.E:http://visualstudiogallery.msdn.microsoft.com/a512e0d0-f4f3-4435-bad4-8d5efbb1db4a

还没有英文文档,抱歉

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    • 2014-01-27
    • 2014-12-13
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多