AutoGen for .NET 的 NuGet 分发机制详解:包族构成、版本策略与本地打包实操
【免费下载链接】autogenA programming framework for agentic AI项目地址: https://gitcode.com/GitHub_Trending/au/autogen
本文以 AutoGen for .NET 发布到 NuGet 时的页面说明文件 NUGET.md 为主线,结合仓库中真实的打包配置,完整讲解 AutoGen .NET SDK 的 NuGet 包族构成、双轨版本策略、包元数据配置以及本地打包与 nightly build 订阅的完整流程。读完本文,你可以明确应该安装哪一个包、版本号从何而来、dotnet pack之后产物如何生成,并能在本地复现一次完整的 NuGet 打包过程。
1. NUGET.md 是什么:NuGet 包页面的"门面"
NUGET.md 是 AutoGen for .NET 发布到 NuGet 时展示在包详情页的 readme 文件。按 dotnet/nuget/README.md 的说明,dotnet/nuget/目录专门存放打包所需的资源与元数据:
- icon.png:NuGet 包图标;
- NUGET.md:展示在 NuGet 包详情页的 readme;
- nuget-package.props:定义打包设置的 MSBuild 属性文件。
NUGET.md 正文传递了三条关键信息,也是理解 AutoGen .NET SDK 分发方式的起点:
AutoGen for .NET是 AutoGen 的官方 .NET SDK,用于创建 LLM Agent 并构建多 Agent 工作流,同时提供对 OpenAI、Semantic Kernel、LM Studio 等流行平台的集成;- 完整文档与示例见官方文档站;
- 通过 nightly build feed 可以消费每日构建版本(详见 dotnet/README.md 与 安装指南)。
这个文件并不是手写维护的普通文档——它是被 MSBuild 直接打进.nupkg的。在 nuget-package.props 中可以看到对应的声明:
<!-- Use icon and NUGET readme from dotnet/nuget folder --> <PackageIcon>icon.png</PackageIcon> <PackageReadmeFile>NUGET.md</PackageReadmeFile> ... <None Include="$(RepoRoot)nuget/icon.png" Link="icon.png" Pack="true" PackagePath="." /> <None Include="$(RepoRoot)nuget/NUGET.md" Link="NUGET.md" Pack="true" PackagePath="." />PackageReadmeFile与Pack="true"的None项共同作用,使 NUGET.md 在打包时位于包根目录,安装后用户在 NuGet 网站看到的说明即来源于此。换言之,修改 NUGET.md 并重新打包,就能更新所有包的对外展示内容。
2. AutoGen for .NET 的包族构成
NUGET.md 提到 SDK 集成了 OpenAI、Semantic Kernel、LM Studio 等平台,这些能力在 NuGet 上被拆分为一族功能清晰的包。根据 安装指南,包族如下:
| 包名 | 职责 |
|---|---|
AutoGen | All-in-one 包,依赖AutoGen.Core、AutoGen.OpenAI、AutoGen.LMStudio、AgenticSemanticKernel(即AutoGen.SemanticKernel)、AutoGen.SourceGenerator等 |
AutoGen.Core | 核心包,提供消息类型、Agent 与群聊(group chat)的抽象 |
AutoGen.OpenAI | OpenAI 模型集成 Agent |
AutoGen.Mistral | Mistral.AI 模型集成 Agent |
AutoGen.Ollama | Ollama 本地模型集成 Agent |
AutoGen.Anthropic | Anthropic 模型集成 Agent |
AutoGen.LMStudio | LM Studio 集成 Agent |
AutoGen.SemanticKernel | Semantic Kernel 集成 Agent |
AutoGen.Gemini | Google Gemini 集成 Agent |
AutoGen.AzureAIInference | Azure AI Inference 集成 Agent |
AutoGen.SourceGenerator | 源生成器,提供类型安全的函数定义生成 |
AutoGen.DotnetInteractive | 基于 dotnet interactive 的代码执行支持(C#、F#、PowerShell、Python) |
指南给出的选型建议同样值得保留:只装一个包就用AutoGen;只想用核心抽象、避免引入Azure.AI.OpenAI等额外依赖就用AutoGen.Core(此时需自行实现 Agent,但群聊、内置消息类型、workflow 与 middleware 仍可用);只想要类型安全的函数调用源生成、连 AutoGen 抽象都不要,则单独选AutoGen.SourceGenerator。
安装命令为:
dotnet add package AUTOGEN_PACKAGES两代包并行:AutoGen.* 与 Microsoft.AutoGen.*
从 dotnet/README.md 可以确认,当前仓库中存在两套包:
AutoGen.*:由 AutoGen 0.2 for .NET 派生的旧包,将逐步弃用并移植到新包中;Microsoft.AutoGen.*:采用事件驱动模型的新包,API 尚未稳定、可能发生变化。
这一"双轨"事实在仓库源码中可以直接印证:dotnet/src/下既有 AutoGen.Core 等旧目录,也有 Microsoft.AutoGen/Core、Microsoft.AutoGen/AgentChat、Microsoft.AutoGen/Contracts 等新目录,且这些项目同样 import 了 nuget-package.props 参与打包。新包的入门示例位于 samples/Hello,其中包含 HelloAgent、HelloAIAgent 等基于 .NET Aspire 的完整样例(含 AppHost、appsettings.json与agent_events.proto协议定义)。
All-in-one 包的内部构成
AutoGen.csproj 展示了AutoGen这个聚合包的组织方式:它通过ProjectReference聚合了AutoGen.Core、AutoGen.OpenAI以及 Anthropic、AzureAIInference、Mistral、Ollama、Gemini、SemanticKernel 等集成项目,并以OutputItemType="Analyzer"的方式挂接AutoGen.SourceGenerator,同时引用Azure.AI.OpenAI外部包。项目内还覆写了Description为 "The all-in-one package for AutoGen...",覆盖 props 中的默认描述。
3. 双版本号的来龙去脉
仓库的包版本策略定义在 eng/MetaInfo.props:
<VersionPrefix>0.4.0</VersionPrefix> <VersionPrefixForAutoGen0_2>0.2.3</VersionPrefixForAutoGen0_2>即两条版本线:0.4.0与0.2.3。dotnet/PACKAGING.md 说明:包版本由VersionPrefix与VersionPrefixForAutoGen0_2共同决定——项目名以AutoGen.开头者使用VersionPrefixForAutoGen0_2,否则使用VersionPrefix。
该条件分支的实际实现在 dotnet/Directory.Build.props:
<PropertyGroup Condition="'$(MSBuildProjectName.StartsWith(`AutoGen`))' == 'true'"> <VersionPrefix>$(VersionPrefixForAutoGen0_2)</VersionPrefix> <IsAutoGen0_2>true</IsAutoGen0_2> </PropertyGroup>结合第 2 节的双轨说明可以完整理解这一设计:AutoGen.*旧包延续 0.2.x 版本线(当前为 0.2.3),而Microsoft.AutoGen.*等新包走 0.4.x 版本线。这对用户的实际意义是:即便两条线同时发布,NuGet 上的版本号也不会互相碰撞;升级旧代码时,也应关注版本前缀所属的包代际,而非单纯比较数字大小。
4. 包元数据:nuget-package.props 逐项解析
dotnet/nuget/nuget-package.props 是所有发行包的公共元数据模板,各 csproj 只需一行 import 即可继承:
<PropertyGroup> <IsPackable>true</IsPackable> <!-- Default description and tags. Packages can override. --> <Authors>Microsoft</Authors> <Product>AutoGen</Product> <Description>A programming framework for agentic AI</Description> <PackageTags>AI, Artificial Intelligence, Agents, Multiagent, SDK</PackageTags> <PackageId>$(AssemblyName)</PackageId> <!-- Required license, copyright, and repo information. Packages can override. --> <PackageLicenseExpression>MIT</PackageLicenseExpression> <Copyright>© Microsoft Corporation. All rights reserved.</Copyright> <!-- Use icon and NUGET readme from dotnet/nuget folder --> <PackageIcon>icon.png</PackageIcon> <PackageReadmeFile>NUGET.md</PackageReadmeFile> <!-- Build symbol package (.snupkg) to distribute the PDB containing Source Link --> <IncludeSymbols>true</IncludeSymbols> <SymbolPackageFormat>snupkg</SymbolPackageFormat> <EmbedUntrackedSources>true</EmbedUntrackedSources> </PropertyGroup>关键属性逐项说明:
IsPackable=true:默认值在 Directory.Build.props 中是false(<IsPackable>false</IsPackable>),即仓库内所有项目默认不打包;只有显式 import 了nuget-package.props的项目才会产出 NuGet 包。测试目录、sample 目录中的项目因此天然被排除在发行列表之外。PackageId=$(AssemblyName):包 ID 直接取程序集名,保证AutoGen.Core.csproj产出的就是AutoGen.Core包,无需逐个声明;这也解释了为何版本分支逻辑可以基于项目名前缀判断。PackageLicenseExpression=MIT:与 MetaInfo.props 中的PackageLicenseExpression及仓库根目录 LICENSE(MIT 协议)一致。IncludeSymbols+SymbolPackageFormat=snupkg:除.nupkg外还构建.snupkg符号包,内含带 Source Link 的 PDB。props 中同时引用了Microsoft.SourceLink.GitHub包(PrivateAssets="All"),配合 PACKAGING.md 中提到的.nupkg/.snupkg双产物,让用户在调试器中可以直接步进到 GitHub 上的托管源码。EmbedUntrackedSources=true:把源码管理中未跟踪的源文件嵌入 PDB,保证符号还原的完整性。GeneratePackageOnBuild(条件属性):
<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <GeneratePackageOnBuild>true</GeneratePackageOnBuild> </PropertyGroup>仅在 Release 配置下于构建时自动打包。
此外,MetaInfo.props 通过 Directory.Build.props 顶部的<Import Project="./eng/MetaInfo.props" />全局注入Authors、PackageProjectUrl、RepositoryUrl(git)等信息,与nuget-package.props中的同名字段形成"全局默认 + 包级覆写"的两层结构。构建签名方面,dotnet/Directory.Build.props 启用了SignAssembly并使用eng/opensource.snk强命名密钥;当SignType为 Test/REAL 时,eng/Sign.props 还会通过 MicroBuild 对AutoGen*.dll与AutoGen*.nupkg做 Authenticode 签名——这也解释了为何签名规则按AutoGen*通配匹配。
5. 本地打包实操:restore → build → pack
按 dotnet/PACKAGING.md,前提是安装 .NET SDK,完整流程为:
# 1. 还原并构建 dotnet restore dotnet build --configuration Release --no-restore # 2. 生成 NuGet 包 dotnet pack --configuration Release --no-build执行后会在./artifacts/package/release目录生成.nupkg与.snupkg文件。这里两个细节与前面配置呼应:
- 产物落在
artifacts/是因为 Directory.Build.props 设置了<UseArtifactsOutput>true</UseArtifactsOutput>(artifacts 布局); - 由于
GeneratePackageOnBuild在 Release 下为true,build 阶段其实已经尝试产出包,dotnet pack --no-build起到的是不重复编译、基于既有构建结果生成包的确认作用。
打包目标框架
Directory.Build.props 中定义:
<PackageTargetFrameworks>netstandard2.0;net8.0</PackageTargetFrameworks>即所有发行包默认同时面向netstandard2.0与net8.0。以 AutoGen.csproj 为例,<TargetFrameworks>$(PackageTargetFrameworks)</TargetFrameworks>正是引用了这一全局属性。
新增项目进入发行列表
PACKAGING.md 指出:新加进AutoGen.sln的项目默认不会被打包,需要在项目的.csproj中加一行 import 才能纳入:
<Import Project="$(RepoRoot)/nuget/nuget-package.props" />$(RepoRoot)由 Directory.Build.props 中的<RepoRoot>$(MSBuildThisFileDirectory)</RepoRoot>提供,指向dotnet/目录。仓库中实际采用该方式的发行项目包括 AutoGen、AutoGen.Core、AutoGen.OpenAI、AutoGen.Gemini、AutoGen.Anthropic、AutoGen.SemanticKernel 以及 Microsoft.AutoGen.Contracts 等。
6. 消费 Nightly Build:订阅每日构建 feed
NUGET.md 引导用户从 nightly build feed 消费每日构建版本。根据 安装指南 与 dotnet/README.md,nightly feed 托管在 Azure Artifacts 的AutoGen-Nightlyfeed,端点为https://pkgs.dev.azure.com/AGPublish/AGPublic/_packaging/AutoGen-Nightly/nuget/v3/index.json。
方式一:项目级 NuGet.config。在项目根目录创建NuGet.config:
<?xml version="1.0" encoding="utf-8"?> <configuration> <packageSources> <clear /> <add key="AutoGen" value="$(FEED_URL)" /> <!-- 替换为上述 feed 端点 --> <!-- other feeds --> </packageSources> <disabledPackageSources /> </configuration>方式二:全局 source。在终端执行:
dotnet nuget add source FEED_URL --name AutoGen # dotnet-tools 源包含 Microsoft.DotNet.Interactive.VisualStudio,供 AutoGen.DotnetInteractive 使用 dotnet nuget add source https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json --name dotnet-tools之后即可按指定版本安装 nightly 包:
dotnet add package AUTOGEN_PACKAGES VERSION从 dotnet/README.md 可以看出该 feed 同时承载新旧两代包("First and old packages" 均从 feed 提供),因此订阅后既可获得AutoGen.*的每日版本,也可获得Microsoft.AutoGen.*的每日版本。注意 nightly 版本未经稳定发布校验,仅建议用于提前跟进新特性。
7. 小结:从 NUGET.md 到一次完整打包
回到 NUGET.md 本身,它虽然只有寥寥数行,但恰好锚定了 AutoGen .NET SDK 分发链路上的三个节点:包是什么(官方 .NET SDK + 平台集成)、去哪看(文档站与仓库 issue)、如何获取最新(nightly feed)。而仓库的打包体系把这三个节点全部落实为可验证的配置:
- 页面展示由 NUGET.md + icon.png 经
nuget-package.props注入包内; - 包族与版本由 MetaInfo.props、Directory.Build.props 的
AutoGen前缀条件分支共同决定(0.2.3 / 0.4.0 双轨); - 元数据、符号包与 Source Link 由 nuget-package.props 统一声明,各 csproj 一行 import 接入;
- 本地复现只需 PACKAGING.md 的三步命令,产物落于
artifacts/package/release。
掌握这条链路后,无论是为项目选型安装、跟进 nightly 新特性,还是本地修改 NUGET.md 后验证打包效果,都有明确的配置依据与操作路径可循。
【免费下载链接】autogenA programming framework for agentic AI项目地址: https://gitcode.com/GitHub_Trending/au/autogen
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考