Roslyn 源生成器未在 .net 框架 4.7.2 中生成任何源

Whi*_*eyJ 2 c# roslyn

可能是一个简单的学习问题,但我正在尝试使用新的 roslyn 源生成器来自动生成 .net framework 4.7.2 的一些源代码(mvc 是目标,但如果它在我的测试控制台中工作,我会很高兴应用程序)。

这是我的代码

    [Generator]
    public class GenerateCommand : ISourceGenerator
    {
        public const string TestCode = @"
namespace Test
{
    public static class Hello
    {
        public static string World = ""Hi from generated code."";
    }
}";

        public void Initialize(InitializationContext context) { }

        public void Execute(SourceGeneratorContext context)
        {
            context.AddSource("Hint_Hello_World", SourceText.From(TestCode, Encoding.UTF8));
        }

        public void Test()
        {
            var x = Test.Hello.World;  // <-- Refuses to build.
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

软件包版本是 Microsoft.CodeAnalysis.CSharp v 3.7.0(以及相关的 roslyn 内容)

这似乎和我能做到的一样简单,如果我的目标是 .net 核心,它似乎可以工作,只是当我试图将它添加到一个框架项目时,它什么都不做。没有错误,没有输出消息,只是没有运行或生成源。

任何帮助,将不胜感激。

Chr*_*icz 5

更新:从 Roslyn 3.8/Visual Studio 16.8 开始,源代码生成器不再支持预览标志,并且应该适用于任何语言版本或目标框架。

请务必查看说明书的重大更改部分,以解决预览版和发布版之间的任何 API 差异。


目前源代码生成器是封闭的,<langversion>preview</langversion>因为它们不是已发布的功能,我们不希望客户在没有意识到的情况下意外使用它们。~~

在发布时,我们将取消语言版本限制,他们将在任何受支持的 Roslyn 编译器上运行,尽管由各个生成器作者来确保他们生成的代码对于用户选择的项目选项是正确的。