news 2026/9/7 14:39:24

AutoGen.NET 打包完全指南:从 dotnet pack 到 NuGet 包元数据与版本管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
AutoGen.NET 打包完全指南:从 dotnet pack 到 NuGet 包元数据与版本管理

AutoGen.NET 打包完全指南:从 dotnet pack 到 NuGet 包元数据与版本管理

【免费下载链接】autogenA programming framework for agentic AI项目地址: https://gitcode.com/GitHub_Trending/au/autogen

本文为 AutoGen 仓库 .NET SDK(AutoGen.NET)的打包维护指南,覆盖完整的手动打包流程(dotnet restoredotnet builddotnet pack)、新项目如何接入 NuGet 打包列表、以及双版本线(VersionPrefix/VersionPrefixForAutoGen0_2)的版本机制。读完本篇,你能够独立产出自签名的.nupkg与符号包.snupkg,并理解仓库中 MSBuild 属性文件如何协同决定包的元数据、目标框架与版本号。

前置条件

打包 AutoGen.NET 只需要 ** .NET SDK**。仓库通过 global.json 锁定了 SDK 版本要求:

{ "sdk": { "version": "9.0.100", "rollForward": "latestFeature" } }

即要求 .NET 9.0.100 及以上同 Feature Band 内的版本(rollForward: latestFeature允许向上滚动到最新特性版本)。所有命令均应在 dotnet/AutoGen.sln 所在目录(即仓库根目录下的dotnet/目录)下执行。

创建 NuGet 包

完整的打包流程分三步:还原、以 Release 配置构建、再执行 pack。

第一步:还原依赖并构建

dotnet restore dotnet build --configuration Release --no-restore

--no-restore表示构建阶段不再触发隐式还原,保证还原与构建两步的职责分离(还原结果可复用,构建更快)。

第二步:执行 dotnet pack

dotnet pack --configuration Release --no-build

同样地,--no-build让 pack 直接复用上一步的 Release 构建产物,不会重新编译。执行完成后,.nupkg包与符号包.snupkg会同时生成在./artifacts/package/release目录中。

这个输出路径并非默认行为,而是由 Directory.Build.props 中的以下属性决定的:

<UseArtifactsOutput>true</UseArtifactsOutput>

UseArtifactsOutput是 .NET SDK 的 "Artifacts 布局" 开关:启用后,构建产物按artifacts/bin/<项目名>/<配置>/统一输出,包文件则固定落在artifacts/package/<配置>/,避免各项目的bin/obj目录散落,也使 CI 与本地打包的产物路径可预期。

符号包(.snupkg)是怎么来的

dotnet/nuget目录中的 nuget-package.props 为所有参与打包的项目统一启用了符号包与 SourceLink:

<!-- Build symbol package (.snupkg) to distribute the PDB containing Source Link --> <IncludeSymbols>true</IncludeSymbols> <SymbolPackageFormat>snupkg</SymbolPackageFormat> <!-- Optional: Embed source files that are not tracked by the source control manager in the PDB --> <EmbedUntrackedSources>true</EmbedUntrackedSources>
<ItemGroup> <PackageReference Include="Microsoft.SourceLink.GitHub" PrivateAssets="All" /> </ItemGroup>

这意味着发布的 PDB 内嵌了 SourceLink 映射,下游消费者可以在调试器中直接跳转到 AutoGen.NET 的托管源码。PrivateAssets="All"保证 SourceLink 只是构建期工具,不会进入发布包的依赖清单。

将新项目加入打包列表

这是一个容易被忽视的坑:把新的.csproj加入 AutoGen.sln 后,它默认不会dotnet pack打包。原因在于仓库级的 Directory.Build.props 对全部项目显式设置了:

<IsPackable>false</IsPackable>

要让某个项目参与打包,需要在新项目的.csproj中显式导入 NuGet 属性文件:

<Import Project="$(RepoRoot)/nuget/nuget-package.props" />

其中$(RepoRoot)在 Directory.Build.props 中被定义为dotnet/目录本身($(MSBuildThisFileDirectory)),因此这条导入路径对仓库内任意深度的项目都成立。

nuget-package.props 提供了什么

dotnet/nuget/nuget-package.props 做了三件事:

  1. IsPackable翻回true,使dotnet pack会处理该项目;
  2. 设置统一的包元数据,包括Authors=MicrosoftProduct=AutoGenDescription=A programming framework for agentic AIPackageId=$(AssemblyName)PackageLicenseExpression=MITRepositoryUrlPublishRepositoryUrl等,各包可在自己的.csproj中覆盖TitleDescription(例如 AutoGen.Core.csproj 覆盖了 "Core library for AutoGen..." 的描述);
  3. 把 nuget/icon.png 与 nuget/NUGET.md 打入包内,作为 NuGet 页面上的图标与 readme:
<ItemGroup> <None Include="$(RepoRoot)nuget/icon.png" Link="icon.png" Pack="true" PackagePath="." /> <None Include="$(RepoRoot)nuget/NUGET.md" Link="NUGET.md" Pack="true" PackagePath="." /> </ItemGroup>

NUGET.md是 NuGet 包页展示的 readme 文案(介绍 AutoGen for .NET SDK、文档站点与 nightly build 渠道),目录说明见 nuget/README.md。

Release 配置下自动打包

nuget-package.props 还有一个条件属性值得注意:

<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup>

也就是说,对已导入该 props 的项目,一次dotnet build --configuration Release就会顺带产出.nupkg,后续的dotnet pack --no-build主要起汇总与校验作用。

项目自带 README 的处理

Directory.Build.targets 还提供了一个自动行为:若某可打包项目的目录下存在README.md,它会被自动作为该项目的PackageReadmeFile打入包内(优先级低于nuget-package.props中显式设置的NUGET.md,因为条件判断$(PackageReadmeFile) == ''只在尚未设置时生效)。

当前已接入打包的项目

在仓库中搜索该导入语句可以确认,目前有 24 个项目接入了打包列表,涵盖两条产品线:

  • AutoGen 0.2 系列AutoGenAutoGen.CoreAutoGen.OpenAIAutoGen.OpenAI.V1AutoGen.AnthropicAutoGen.GeminiAutoGen.MistralAutoGen.OllamaAutoGen.LMStudioAutoGen.SemanticKernelAutoGen.AzureAIInferenceAutoGen.DotnetInteractiveAutoGen.WebAPIAutoGen.SourceGenerator
  • Microsoft.AutoGen 系列(AutoGen 0.4 新架构):Microsoft.AutoGen.ContractsMicrosoft.AutoGen.CoreMicrosoft.AutoGen.Core.GrpcMicrosoft.AutoGen.AgentChatMicrosoft.AutoGen.AgentHostMicrosoft.AutoGen.AgentsMicrosoft.AutoGen.RuntimeGateway.Grpc及若干 Extensions 项目。

可以推断:Microsoft.AutoGen.*项目名不以AutoGen开头(注意前缀是Microsoft.),因此不受 0.2 版本号条件影响(见下一节)。

包版本管理

包版本由 eng/MetaInfo.props 集中定义,当前值为:

<VersionPrefix>0.4.0</VersionPrefix> <VersionPrefixForAutoGen0_2>0.2.3</VersionPrefixForAutoGen0_2>

版本分配规则在 Directory.Build.props 中实现:

<PropertyGroup Condition="'$(MSBuildProjectName.StartsWith(`AutoGen`))' == 'true'"> <VersionPrefix>$(VersionPrefixForAutoGen0_2)</VersionPrefix> <IsAutoGen0_2>true</IsAutoGen0_2> </PropertyGroup>

即:项目名以AutoGen开头的,版本取VersionPrefixForAutoGen0_2(当前 0.2.3);否则取VersionPrefix(当前 0.4.0)。这与上文的项目清单对应:所有AutoGen.*包走 0.2.x 版本线,Microsoft.AutoGen.*包走 0.4.x 版本线,两条产品线在同一个解决方案中并行演进、互不干扰。

此外还有两条影响打包行为的仓库级设置:

  • 双目标框架<PackageTargetFrameworks>netstandard2.0;net8.0</PackageTargetFrameworks>(见 Directory.Build.props),因此AutoGen.*系列包同时携带netstandard2.0net8.0两个资产的 lib 目录;而像 Microsoft.AutoGen.Core.csproj 这样的新架构项目则单独指定<TargetFramework>net8.0</TargetFramework>,只产出单一目标框架的资产。
  • 强名称签名:所有程序集统一使用 eng/opensource.snk 签名(SignAssembly=True),保证包内程序集身份稳定。

依赖来源由仓库根部的 NuGet.config 锁定为官方nuget.org源(<clear />清空了其他源),还原行为是确定的。

小结:打包流程与文件职责速查

文件在打包链路中的职责
dotnet/eng/MetaInfo.props定义VersionPrefix(0.4.0)与VersionPrefixForAutoGen0_2(0.2.3)
dotnet/Directory.Build.props全局IsPackable=false、Artifacts 输出布局、双目标框架、按项目名分配版本线、强名称签名
dotnet/nuget/nuget-package.props接入打包的"开关":IsPackable=true+ 统一元数据 + 图标/readme + 符号包与 SourceLink
dotnet/Directory.Build.targets自动将项目本地README.md作为包 readme
dotnet/NuGet.config固定还原源为 nuget.org

整体流程可以概括为:先确认 .NET SDK 满足 global.json 要求,然后在dotnet/目录执行

dotnet restore dotnet build --configuration Release --no-restore dotnet pack --configuration Release --no-build

./artifacts/package/release收取.nupkg.snupkg即可。新增可打包项目时,只需在其.csproj中加入一行<Import Project="$(RepoRoot)/nuget/nuget-package.props" />,并按项目名前缀确认它落在哪条版本线上。

【免费下载链接】autogenA programming framework for agentic AI项目地址: https://gitcode.com/GitHub_Trending/au/autogen

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 14:37:28

将XXXUtils合而为一:工具类重构的分层设计与迁移实践

我这两年接手过的老项目不算少&#xff0c;几乎每一个里面都有这么个“神奇”的目录&#xff1a;一堆名字叫 XXXUtils 、 YYYUtil 、 ZZZHelper 的类散落在各个业务模块里&#xff0c;谁都能往里加方法&#xff0c;谁也不敢删。直到前阵子被拉去处理一个迭代了三年的服务…

作者头像 李华
网站建设 2026/9/7 14:36:39

Three.js实现3D可视化机房:从建模到交互的性能优化实战

简介&#xff1a;基于Three.js的3D可视化机房项目&#xff0c;是一份面向Web前端与三维可视化开发者的实战源码。项目通过第一人称视角在虚拟机房中自由漫游&#xff0c;查看设备布局与运行状态&#xff0c;适用于智慧园区、数据中心可视化运维等真实业务场景。压缩包共176个文…

作者头像 李华
网站建设 2026/9/7 14:34:58

BP-PID神经网络控制器Simulink仿真与代码实现

简介&#xff1a;面向需要将神经网络与PID控制结合的工程师和研究人员&#xff0c;这份资源提供了完整的BP-PID实现&#xff0c;包括Simulink模型、Matlab脚本、说明文档和示意图。其中核心Slx模型展示了BP网络与PID控制器的接口搭建&#xff0c;M脚本用于训练和参数传递&#…

作者头像 李华
网站建设 2026/9/7 14:29:22

抽奖系统技术实现:从概率算法到前后端架构详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 14:28:20

Notepad++高效文本排版技巧:正则、列编辑与宏的实战应用

1. 内容整体设计与思路拆解先说个现象&#xff1a;很多人电脑里装了Notepad&#xff0c;但只拿它当“比记事本能多开几个标签页”的替代品。真正遇到文本排版需求&#xff0c;比如从网页上复制了一段带格式的文章、从PDF导出了乱成一团的文字、手头有一份几千行的日志需要对齐整…

作者头像 李华