AutoGen for .NET 的 NuGet 分发机制详解:包族构成、版本策略与本地打包实操
2026/9/6 21:45:27 网站建设 项目流程

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 分发方式的起点:

  1. AutoGen for .NET是 AutoGen 的官方 .NET SDK,用于创建 LLM Agent 并构建多 Agent 工作流,同时提供对 OpenAI、Semantic Kernel、LM Studio 等流行平台的集成;
  2. 完整文档与示例见官方文档站;
  3. 通过 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="." />

PackageReadmeFilePack="true"None项共同作用,使 NUGET.md 在打包时位于包根目录,安装后用户在 NuGet 网站看到的说明即来源于此。换言之,修改 NUGET.md 并重新打包,就能更新所有包的对外展示内容。

2. AutoGen for .NET 的包族构成

NUGET.md 提到 SDK 集成了 OpenAI、Semantic Kernel、LM Studio 等平台,这些能力在 NuGet 上被拆分为一族功能清晰的包。根据 安装指南,包族如下:

包名职责
AutoGenAll-in-one 包,依赖AutoGen.CoreAutoGen.OpenAIAutoGen.LMStudioAgenticSemanticKernel(即AutoGen.SemanticKernel)、AutoGen.SourceGenerator
AutoGen.Core核心包,提供消息类型、Agent 与群聊(group chat)的抽象
AutoGen.OpenAIOpenAI 模型集成 Agent
AutoGen.MistralMistral.AI 模型集成 Agent
AutoGen.OllamaOllama 本地模型集成 Agent
AutoGen.AnthropicAnthropic 模型集成 Agent
AutoGen.LMStudioLM Studio 集成 Agent
AutoGen.SemanticKernelSemantic Kernel 集成 Agent
AutoGen.GeminiGoogle Gemini 集成 Agent
AutoGen.AzureAIInferenceAzure 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.jsonagent_events.proto协议定义)。

All-in-one 包的内部构成

AutoGen.csproj 展示了AutoGen这个聚合包的组织方式:它通过ProjectReference聚合了AutoGen.CoreAutoGen.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.00.2.3。dotnet/PACKAGING.md 说明:包版本由VersionPrefixVersionPrefixForAutoGen0_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" />全局注入AuthorsPackageProjectUrlRepositoryUrl(git)等信息,与nuget-package.props中的同名字段形成"全局默认 + 包级覆写"的两层结构。构建签名方面,dotnet/Directory.Build.props 启用了SignAssembly并使用eng/opensource.snk强命名密钥;当SignType为 Test/REAL 时,eng/Sign.props 还会通过 MicroBuild 对AutoGen*.dllAutoGen*.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.0net8.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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询