Roslyn Source Generator在.net Framework 4.7.2中未生成任何源

问题描述

可能是一个简单的学习问题,但是我试图使用新的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.
        }
    }
}

软件包版本为Microsoft.CodeAnalysis.CSharp v 3.7.0(和相关的roslyn内容

这似乎很简单,而且如果我以.net core为目标,那似乎可以正常工作,只是当我试图将其添加到框架项目中时,它什么也不做。没有错误,没有输出消息,只是没有运行或没有生成源。

任何帮助将不胜感激。

解决方法

当前,源生成器不是发布的功能,而被封闭在<langversion>preview</langversion>后面,我们不希望客户在没有意识到的情况下意外使用它们。

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

,

感谢Chris Sienkiewicz进行的编辑:当前,源代码生成器仅位于预览语言版本之后,因此不适用于.NET 5以外的其他.NET版本。但是,一旦源代码生成器处于已发布且稳定。


旧答案:

源代码生成器是.NET(核心)5 / C#9功能,无法使其与.NET Framework(或.NET Core!= 5)一起使用。如果需要在编译时生成代码,则有几种选择:

  1. 使用T4模板
  2. 添加一个pre-build event
  3. 使用类似Clarius.TransformOnBuild的NuGet包