前面我们简单的实现了一个从swagger生成实体类的Generator,在实际使用中,通过nuget包引用使用会更方便,那么本篇文章将介绍如何将Generator打包成Nuget来使用。

打包Nuget

这里我们将GenerateClassFromSwagger.Analysis打包成Nuget进行使用。

首先需要修改项目文件。

修改项目文件

在PropertyGroup添加true表示在编译时生成nuget包以及false表示不要将生成器作为库依赖项包括在内。

以及添加ItemGroup 包含将生成器打包到nuget包的分析器目录中

如果没有第三方依赖的时候,仅这些配置已经足够了。如果需要依赖第三方组件。

这里我们依赖了Newtonsoft.Json的包,则需要添加 来指定和Generator的依赖关系。

完整修改后的项目配置如下:

<Project Sdk="Microsoft.NET.Sdk">

	<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<LangVersion>latest</LangVersion>
<Version>1.0.2</Version>
<EnforceExtendedAnalyzerRules>true</EnforceExtendedAnalyzerRules>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<GetTargetPathDependsOn>$(GetTargetPathDependsOn);GetDependencyTargetPaths</GetTargetPathDependsOn>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild><!-- Generates a package at build -->
<IncludeBuildOutput>false</IncludeBuildOutput><!-- Do not include the generator as a lib dependency -->
</PropertyGroup> <ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" PrivateAssets="all" GeneratePathProperty="true" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.2.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" />
</ItemGroup> <Target Name="GetDependencyTargetPaths" AfterTargets="ResolvePackageDependenciesForBuild">
<ItemGroup>
<TargetPathWithTargetPlatformMoniker Include="@(ResolvedCompileFileDefinitions)" IncludeRuntimeDependency="false" />
</ItemGroup>
</Target> <ItemGroup>
<!-- Package the generator in the analyzer directory of the nuget package -->
<None Include="$(OutputPath)\$(AssemblyName).dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" /> <!-- Package the Newtonsoft.Json dependency alongside the generator assembly -->
<None Include="$(PkgNewtonsoft_Json)\lib\netstandard2.0\*.dll" Pack="true" PackagePath="analyzers/dotnet/cs" Visible="false" />
</ItemGroup>
</Project>

编译项目

修改项目文件后,编译项目,可以在Debug目录下看到nupkg文件。



将文件上传到nuget.org,等待上架成功后可以在NUGET包管理器搜索并安装。

安装Nuget

首先创建一个GenerateClassFromSwaggerNuget的控制台项目,然后添加Nuget依赖。搜索GenerateClassFromSwagger.Analysis即可找到。



将我们的swagger.json复制一份过来并设置成AdditionalFiles。



修改包属性的OutputItemType和ReferenceOutputAssembly

完整配置如下:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup> <ItemGroup>
<AdditionalFiles Include="Files\swagger.json" />
</ItemGroup> <ItemGroup>
<PackageReference Include="GenerateClassFromSwagger.Analysis" Version="1.0.2" OutputItemType="Analyzer" ReferenceOutputAssembly="false" />
</ItemGroup> </Project>

编译控制台项目

接下来编译GenerateClassFromSwaggerNuget项目,编译完成后。可以在分析器看到我们生成的文件





跟我们直接引用项目依赖的效果一致。

输出文件

同样,如果我们需要输出文件,在项目文件中添加EmitCompilerGeneratedFiles标签。

<EmitCompilerGeneratedFiles>true</EmitCompilerGeneratedFiles>

然后再次编译。可以在obj目录中找到生成的文件列表。



如果需要输出到指定目录,则跟上篇文章的方式一致,这里就不赘述了。

结语

本片文章介绍了将Generator打包成Nuget进行使用,可以更方便的在不同项目中使用。

本文代码仓库地址https://github.com/fanslead/Learn-SourceGenerator

学习Source Generators之打包成Nuget使用的更多相关文章

  1. [python学习笔记] python程序打包成exe文件

    安装 pyinstaller pip3 install pyinstaller 命令 pyinstaller -F -w -i ../ui/icon.ico --clean ../Login.py 参 ...

  2. 把 Python 脚本打包成可以直接双击运行的 .exe 文件 【转】

    因为最近要用到 Python 脚本,所以自己学习了一下,顺便学习如何把它打包成 .exe 可执行文件,达到双击运行的效果,网上找了资料,保存下来学习用,原文出处:https://baijiahao.b ...

  3. PyQt(Python+Qt)学习随笔:windows下使用pyinstaller将PyQt文件打包成exe可执行文件

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<windows下使用pyinstaller将多个目录的Pyt ...

  4. Qt 学习笔记 - 第三章 - Qt的三驾马车之一 - 串口编程 + 程序打包成Windows软件

    Qt 学习笔记全系列传送门: Qt 学习笔记 - 第一章 - 快速开始.信号与槽 Qt 学习笔记 - 第二章 - 添加图片.布局.界面切换 [本章]Qt 学习笔记 - 第三章 - Qt的三驾马车之一 ...

  5. kivy学习三:打包成window可执行文件

    根据官方文档写出如下内容,主要是为了记录自己遇到的坑! 一.打开命令行 1.win+r 2.输入CMD(没错,就是那个黑窗口就是命令行) 二.新建一个新文件夹,用来存放我们打包成的文件(这里一定要注意 ...

  6. 微阅读,不依赖playground,打包成H5版本--案例学习

    微阅读,不依赖playground,打包成H5版本 https://github.com/vczero/weex-yy-h5

  7. Electron+Vue – 基础学习(2): 项目打包成exe桌面应用

    项目创建完成,启动正常,接下来就是项目打包了.将测试Demo打包成exe桌面应用,点击exe文件,运行项目. 书接上文,创建项目有三种方式 Git拷贝.直接创建:通过electron社群提供的命令行工 ...

  8. Electron – 基础学习(2): 项目打包成exe桌面应用 之electron-packager

    项目创建完成,启动正常,接下来就是项目打包了.将测试Demo打包成exe桌面应用,点击exe文件,运行项目. 书接上文,创建项目有三种方式 Git拷贝.直接创建:通过electron社群提供的命令行工 ...

  9. 10分钟学会Visual Studio将自己创建的类库打包到NuGet进行引用(net,net core,C#)

    前言 NuGet就是一个包(package)管理平台,确切的说是 .net平台的包管理工具,它提供了一系列客户端用于生成,上传和使用包(package),以及一个用于存储所有包的中心库. 对于一个现代 ...

  10. Android学习第三天-打包常用命令

    在前面<Android学习第一天-adb常用命令>和 <Android学习第二天-android常用命令>两篇博文中,我们重点讲解了adb和android的常用命令,下面我们讲 ...

随机推荐

  1. CTF中常见编码

    ASCII编码 ASCII HEX DEC flag{hello_ctfer} 66 6c 61 67 7b 68 65 6c 6c 6f 5f 63 74 66 65 72 7d 102 108 9 ...

  2. 获取input[type="checkbox"]:checked 所在tr中特定元素

    1.要求如下  2.html源码 <div class="btn"> <button type="button" onclick=" ...

  3. python可视化工具pyecharts初相识

    一 概念 1.pyecahrts基础 某度开源了一个python的可视化工具pyecharts,该工具凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可.而 python 是一门富有表达力的语 ...

  4. docker跑es流程再整理

    参考,欢迎点击原文:https://blog.csdn.net/qq_32101993/article/details/100021002(报错) 继老早前一篇文章整理的使用docker-compos ...

  5. IE故障修复之点击无反应

     第一步,点击开始,运行,打开Regedit,即注册表编辑器.依次找到 >>HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer ...

  6. Android热点SoftAP使用方式

    一.背景 最近项目中Android设备需要获取SoftAP信息(wifi账号.密码.IP等),然后传递到投屏器中,那么如何获取到SoftAP信息呢?我们知道可以通过WifiManager类里的方法可以 ...

  7. 2023年VR虚拟现实的10个应用行业

    1.医疗保健 现代医疗保健的培训方式离不开VR虚拟现实..由于医疗行业的特殊性,不允许拿大量的病人来练手,但医疗又非常注重实践,一些新手医生就缺乏锻炼的机会,而VR虚拟现实技术很好的解决了这一问题.医 ...

  8. Three.js中加载和渲染3D Tiles

    1. 引言 3D Tiles 是 3D GIS 中常见的三维数据格式,能否用Three.js来加载渲染呢?肯定是可以,Three.js只是一个WebGL框架,渲染数据肯定可以,但是加载.解析数据得手动 ...

  9. TorchV的RAG实践分享(二):基于ElasticSearch的混合检索实战&原理分析

    概述 在昨天员外分享的<TorchV的RAG实践分享(1)--RAG的定位.技术选型和RAG技术文章目录>一文中介绍了TorchV的由来,也分享了我们的几个基线产品和应用架构的方向,我们想 ...

  10. .NET Emit 入门教程:第四部分:构建类型(Type)

    前言: 在动态生成代码的过程中,构建类型(Type)是至关重要的一步. 通过使用 Emit 中的 TypeBuilder,我们可以定义和创建各种类型,包括类.结构体和接口. 本节将深入探讨如何使用 T ...