Roslyn特征/模式分支(C#7) - 如何启用实验语言功能

时间:2016-01-29 01:48:05

标签: c# roslyn c#-7.0

我想尝试一下潜在的C#7未来语言功能。

我有一个虚拟机,我已经下载了Roslyn代码库(功能/模式分支),并按照Roslyn的github所述构建:Building and Testing on Windows

我可以成功启动一个新的Visual Studio实验实例(将VisualStudioSetup设置为启动项目并运行)。

当我尝试新的语言功能(模式匹配和本地函数)时,我在编辑器中出现错误,并且在构建时也出错:

Pattern matching error squiggly

Local function error squiggly

  

错误CS8058功能'本地功能'是实验性的   不支持的;使用'/ features:localFunctions'来启用。

     

错误CS8058功能'模式匹配'是实验性的   不支持的;使用'/ features:patterns'来启用。

我在哪里提出这些选项?

我尝试将其添加到命令行参数中,但是我收到错误。

Roslyn Args

Roslyn Args Error

3 个答案:

答案 0 :(得分:5)

我还没有修复bug 7812。遗憾。

在内部,编译器团队主要通过单元测试或命令行编译器来测试事物;如果我们确实需要测试IDE,我们只需删除传入功能标记的检查。

答案 1 :(得分:4)

抱歉,我没有使用您下载的代码完成R& D.

但是在Visual Studio'15'预览版中(2016年3月30日宣布)我已经很容易解决了这个问题。这可能对其他人有所帮助。

我收到了错误

错误CS8058功能“本地功能”是实验性的,不受支持;使用'/ features:localFunctions'来启用。

要解决此问题,请选择您的项目名称,然后右键单击>>属性窗口>>然后建立 在“条件编译符号”文本框中添加以下两个选项 __ DEMO __,__ DEMO_EXPERIMENTAL __

enter image description here

点击“保存”按钮进行保存。现在构建您的应用程序,您的构建将成功。

即使在我的最后,如果我添加任何一个 __ DEMO__& __DEMO_EXPERIMENTAL __ 然后它工作正常。

答案 2 :(得分:3)

我找到了启用新语言功能的方法。

通过跟踪我发现进行特征检查的代码(函数IsFeatureEnabled)并将其更改为始终返回true。

然后我像以前一样从命令行重建。之后,当我启动实验性Visual Studio实例时,将启用新的语言功能。

在:

Feature Breakpoint

在:

internal bool IsFeatureEnabled(MessageID feature)
{
    // Force all demo features:
    return true;

    // in "demo" mode enable all language features.
    if (PreprocessorSymbols.Contains("__DEMO__"))
    {
        return true;
    }