.NET 6源代码生成器和C# 9语法

3
如果源代码生成器项目必须针对netstandard2.0C# 7.3)进行目标设置,那么为什么.NET 6增量生成器文档中的示例使用C# 9语法,如静态匿名函数?
从文档中可以看出,格式已调整为适应宽度:
IncrementalValuesProvider<AdditionalText> textFiles =
   context.AdditionalTextsProvider.Where(static file =>
      file.Path.EndsWith(".txt"));

如果你的目标是netstandard2.0,那么实际上你可以使用高于7.3版本的C#语言,这只是构建系统中的人为限制(呃呃呃)。这很复杂,到目前为止我只在多目标项目中使其工作,例如https://www.meziantou.net/how-to-use-nullable-reference-types-in-dotnet-standard-2-0-and-dotnet-.htm(哦,还有我的所有多目标项目都会让VS 2019变得非常缓慢...) - Dai
@Dai 这篇博客文章 也只是简单地提到了它。也许我是唯一一个没有修改语言版本的人! - Kevin Krumwiede
1个回答

2
只需在.csproj文件中将C#版本更改为9,如<LangVersion>9.0</LangVersion>

这么简单似乎有点可疑。如果没有什么理由不这样做,为什么不把它设为默认值呢? - Kevin Krumwiede
@KevinKrumwiede,这是C#团队的决定,将语言版本默认绑定到框架版本上,原因是因为语言中存在依赖于特定新框架组件的更改,虽然它们通常会提供Nuget包作为旧版本的polyfil,但他们不想被要求这样做。 - yoel halb
也许这值得另一个问题,但这是否意味着如果我更改语言版本并在库项目中使用这些新的语言特性,我正在为某些消费者创建对这些 polyfill 包的依赖? - Kevin Krumwiede
1
@KevinKrumwiede 请参见 https://dev59.com/01MI5IYBdhLWcg3wPpK4 - riQQ
只要你不使用需要polyfill的功能,就可以放心使用了。仅仅改用新版本的C#对于编译器来说是没有运行时需求的。然而,如果你使用了需要polyfill的功能,那么编译器会报错,除非你明确添加polyfill依赖。 - yoel halb
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接