问题描述
可能是一个简单的学习问题,但是我试图使用新的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)一起使用。如果需要在编译时生成代码,则有几种选择:
- 使用T4模板
- 添加一个pre-build event
- 使用类似Clarius.TransformOnBuild的NuGet包