.Net Core 你必须知道的source-generators

这篇具有很好参考价值的文章主要介绍了.Net Core 你必须知道的source-generators。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

源生成器是 C# 9 中引入的一项功能,允许在编译过程中动态生成代码

它们直接与 C# 编译器集成(Roslyn)并在编译时运行,分析源代码并根据分析结果生成附加代码

源生成器提供了一种简化的自动化代码生成方法,无需外部工具或单独的预编译步骤。

通过无缝集成到编译过程中,源生成器可以提高生产力、减少错误并实现更高效的开发工作流程。

 文章来源地址https://www.toymoban.com/news/detail-840617.html

如何使用

创建 .NET 控制台应用程序。 此示例使用 .NET 6。将 Program 类替换为以下代码。 

namespace ConsoleApp;

partial class Program
{
    static void Main(string[] args)
    {
        HelloFrom("Generated Code");
    }

    static partial void HelloFrom(string name);
}

接下来,我们将创建一个源生成器项目来实现 partial void HelloFrom 方法对应项。

创建一个以 netstandard2.0 目标框架名字对象为目标的 .NET 类库。 添加以下 NuGet 包

<ItemGroup>
    <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" PrivateAssets="all" />
    <PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" />
</ItemGroup>

 

然后,创建一个名为 HelloSourceGenerator.cs 的新 C# 文件,该文件指定你自己的源生成器,如下所示:

using Microsoft.CodeAnalysis;

namespace SourceGeneratorInCSharp
{
    [Generator]
    public class SourceGenerator : ISourceGenerator
    {
        public void Execute(GeneratorExecutionContext context)
        {
            // Find the main method
            var mainMethod = context.Compilation.GetEntryPoint(context.CancellationToken);

            // Build up the source code
            string source = $@"// <auto-generated/>
using System;

namespace {mainMethod.ContainingNamespace.ToDisplayString()}
{{
    public static partial class {mainMethod.ContainingType.Name}
    {{
        static partial void HelloFrom(string name) =>
            Console.WriteLine($""Generator says: Hi from '{{name}}'"");
    }}
}}
";
            var typeName = mainMethod.ContainingType.Name;

            // Add the source code to the compilation
            context.AddSource($"{typeName}.g.cs", source);
        }

        public void Initialize(GeneratorInitializationContext context)
        {
            // No initialization required for this one
        }
    }
}

 

现在,我们有一个正常运行的生成器,但需要将其引用到控制台应用程序。 

新引用不是传统的项目引用,必须手动编辑以包含 OutputItemType 和 ReferenceOutputAssembly 属性。

<ItemGroup>
    <ProjectReference Include="..\SourceGeneratorInCSharp\SourceGeneratorInCSharp.csproj"
                        OutputItemType="Analyzer"
                        ReferenceOutputAssembly="false" /> 
</ItemGroup>

 

现在,运行控制台应用程序时,应会看到生成的代码运行并打印到屏幕。

控制台应用程序本身不实现 HelloFrom 方法,而是在编译过程中从源生成器项目生成的源。

.Net Core 你必须知道的source-generators

 

如果使用的是 Visual Studio,则可以看到源生成的文件。

在“解决方案资源管理器”窗口中,展开“依赖项”>“分析器”>“SourceGenerator”>“SourceGenerator.HelloSourceGenerator”,然后双击“Program.g.cs”文件即可看到生成的内容。

.Net Core 你必须知道的source-generators

 

https://learn.microsoft.com/zh-cn/dotnet/csharp/roslyn-sdk/source-generators-overview

 

到了这里,关于.Net Core 你必须知道的source-generators的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【技术干货】测试必须知道的精准测试

        目前说到测试提效,基本上想到的都是自动化测试。然而,不管是手工测试还是自动化测试,都存在下面的问题,即每一次版本更新时,我们不确定这些更新到底影响范围有多大,无法精准地评估出测试范围,所以不得不执行完整的全回归测试,就算是自动化测试,执

    2023年04月19日
    浏览(76)
  • 蓝桥杯将至,这些要点你必须知道

    哈喽,大家好,蓝桥杯是全国软件和信息技术专业人才大赛由工业和信息化部人才交流中心主办,包括北大、清华等在内的全国31个省市自治区1200多所院校参加,每年参赛人数超过30000人。到目前为止,距离比赛还有不到半个月的时间,再次之前,一些比赛的要点你必须知道。

    2023年04月17日
    浏览(76)
  • 关于 GPT必须知道的10 个认知!

    自从 GPT-4 发布以来,短短十来天,人类像来到了一个完全不同的世界。如果未来书写历史, AI 时代的奇点,应是 GPT-4 正式对外发布的这一天:2023 年 3 月 15 日。 关于 GPT 的新闻报道,堪称汗牛充栋,然而,不少认知,却不一定正确。特将平时思考整理成文,供各位读者参考

    2024年02月07日
    浏览(44)
  • 软件测试必须知道的方法和知识

    “软件测试技术是软件开发过程中的一个重要组成部分,是贯穿整个软件开发生命周期、对软件产品(包括阶段性产品)进行验证和确认的活动过程,其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性。检查软件产品的bug。写成测

    2024年02月12日
    浏览(34)
  • 前端必须知道的手机调试工具vConsole

    在日常业务中我相信大家多多少少都有移动端的项目,移动端的项目需要真机调试的很多东西看不到调试起来也比较麻烦,今天给大家分享一个我认为比较好用的调试第三方库 VConsole ,有了这个库咱们就在手机上看控制台了, VConsole有两种引用方式,使用方法也很简单 方法一

    2024年02月12日
    浏览(33)
  • Go数据结构----你必须知道的一些

    算法(英文 algorithm )这个词在中文里面博大精深,表示算账的方法,也可以表示运筹帷幄的计谋等。在计算机科技里,它表示什么呢? 计算机,顾名思义是用来计算的机器。算法在计算机科学中可以描述为:计算机接收一个输入指令,然后进行一个过程处理,最后输出计算

    2024年02月03日
    浏览(41)
  • 编程入门:五个你必须知道的编程常识

    常识1:编程不仅仅是写代码 当我们谈论编程时,大多数人首先想到的是写代码。这是正确的,但并不完整。编程不仅仅是写代码,而是解决问题的一种方式。编程是一种工具,我们使用它来创建能够解决特定问题的产品和服务。 比如,你想开发一个手机应用来帮助人们更有

    2024年01月23日
    浏览(58)
  • 网络安全你必须知道的100个小知识

    网络安全风险无处不在,信服君为大家梳理了 100 个网络安全相关的小知识,希望能进一步提升大家的安全意识,帮助大家建立更加安全的网络环境。 其实入门网络安全要学的东西不算多,也就是网络基础+操作系统+中间件+数据库,四个流程下来就差不多了。 其中包括操作系

    2024年02月15日
    浏览(34)
  • 设计师必须知道的 5个设计灵感网站

    设计没灵感,一定要上这5个网站,设计师每天必逛,建议收藏! 设计素材免费下载: https://www.sucai999.com/?v=NTYwNDUx 国内灵感网 1、设计之窗 http://www.333cn.com/ 设计之窗是一个设计师分享作品及备案的网站,涵盖插图、建筑、平面、工业、摄影、艺术等多个栏目,创意新颖,还

    2023年04月25日
    浏览(65)
  • 交互设计师必须知道的五大交互设计流程

    交互设计师必须知道的五大交互设计流程 交互设计 又称互动设计,从用户角度来说, 交互设计 是一种如何让产品易用,有效而让人愉悦的技术,它致力于了解目标用户和他们的期望,了解用户在同产品交互时彼此的行为,了解“人”本身的心和行为特点。同时,还包括了解

    2024年02月03日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包