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

发布时间:2026/9/7 14:39:29
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 SDKAutoGen.NET的打包维护指南覆盖完整的手动打包流程dotnet restore→dotnet build→dotnet 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 packdotnet pack --configuration Release --no-build同样地--no-build让 pack 直接复用上一步的 Release 构建产物不会重新编译。执行完成后.nupkg包与符号包.snupkg会同时生成在./artifacts/package/release目录中。这个输出路径并非默认行为而是由 Directory.Build.props 中的以下属性决定的UseArtifactsOutputtrue/UseArtifactsOutputUseArtifactsOutput是 .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 -- IncludeSymbolstrue/IncludeSymbols SymbolPackageFormatsnupkg/SymbolPackageFormat !-- Optional: Embed source files that are not tracked by the source control manager in the PDB -- EmbedUntrackedSourcestrue/EmbedUntrackedSourcesItemGroup PackageReference IncludeMicrosoft.SourceLink.GitHub PrivateAssetsAll / /ItemGroup这意味着发布的 PDB 内嵌了 SourceLink 映射下游消费者可以在调试器中直接跳转到 AutoGen.NET 的托管源码。PrivateAssetsAll保证 SourceLink 只是构建期工具不会进入发布包的依赖清单。将新项目加入打包列表这是一个容易被忽视的坑把新的.csproj加入 AutoGen.sln 后它默认不会被dotnet pack打包。原因在于仓库级的 Directory.Build.props 对全部项目显式设置了IsPackablefalse/IsPackable要让某个项目参与打包需要在新项目的.csproj中显式导入 NuGet 属性文件Import Project$(RepoRoot)/nuget/nuget-package.props /其中$(RepoRoot)在 Directory.Build.props 中被定义为dotnet/目录本身$(MSBuildThisFileDirectory)因此这条导入路径对仓库内任意深度的项目都成立。nuget-package.props 提供了什么dotnet/nuget/nuget-package.props 做了三件事把IsPackable翻回true使dotnet pack会处理该项目设置统一的包元数据包括AuthorsMicrosoft、ProductAutoGen、DescriptionA programming framework for agentic AI、PackageId$(AssemblyName)、PackageLicenseExpressionMIT、RepositoryUrl、PublishRepositoryUrl等各包可在自己的.csproj中覆盖Title和Description例如 AutoGen.Core.csproj 覆盖了 Core library for AutoGen... 的描述把 nuget/icon.png 与 nuget/NUGET.md 打入包内作为 NuGet 页面上的图标与 readmeItemGroup None Include$(RepoRoot)nuget/icon.png Linkicon.png Packtrue PackagePath. / None Include$(RepoRoot)nuget/NUGET.md LinkNUGET.md Packtrue PackagePath. / /ItemGroupNUGET.md是 NuGet 包页展示的 readme 文案介绍 AutoGen for .NET SDK、文档站点与 nightly build 渠道目录说明见 nuget/README.md。Release 配置下自动打包nuget-package.props 还有一个条件属性值得注意PropertyGroup Condition $(Configuration) Release GeneratePackageOnBuildtrue/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 系列AutoGen、AutoGen.Core、AutoGen.OpenAI、AutoGen.OpenAI.V1、AutoGen.Anthropic、AutoGen.Gemini、AutoGen.Mistral、AutoGen.Ollama、AutoGen.LMStudio、AutoGen.SemanticKernel、AutoGen.AzureAIInference、AutoGen.DotnetInteractive、AutoGen.WebAPI、AutoGen.SourceGeneratorMicrosoft.AutoGen 系列AutoGen 0.4 新架构Microsoft.AutoGen.Contracts、Microsoft.AutoGen.Core、Microsoft.AutoGen.Core.Grpc、Microsoft.AutoGen.AgentChat、Microsoft.AutoGen.AgentHost、Microsoft.AutoGen.Agents、Microsoft.AutoGen.RuntimeGateway.Grpc及若干 Extensions 项目。可以推断Microsoft.AutoGen.*项目名不以AutoGen开头注意前缀是Microsoft.因此不受 0.2 版本号条件影响见下一节。包版本管理包版本由 eng/MetaInfo.props 集中定义当前值为VersionPrefix0.4.0/VersionPrefix VersionPrefixForAutoGen0_20.2.3/VersionPrefixForAutoGen0_2版本分配规则在 Directory.Build.props 中实现PropertyGroup Condition$(MSBuildProjectName.StartsWith(AutoGen)) true VersionPrefix$(VersionPrefixForAutoGen0_2)/VersionPrefix IsAutoGen0_2true/IsAutoGen0_2 /PropertyGroup即项目名以AutoGen开头的版本取VersionPrefixForAutoGen0_2当前 0.2.3否则取VersionPrefix当前 0.4.0。这与上文的项目清单对应所有AutoGen.*包走 0.2.x 版本线Microsoft.AutoGen.*包走 0.4.x 版本线两条产品线在同一个解决方案中并行演进、互不干扰。此外还有两条影响打包行为的仓库级设置双目标框架PackageTargetFrameworksnetstandard2.0;net8.0/PackageTargetFrameworks见 Directory.Build.props因此AutoGen.*系列包同时携带netstandard2.0与net8.0两个资产的 lib 目录而像 Microsoft.AutoGen.Core.csproj 这样的新架构项目则单独指定TargetFrameworknet8.0/TargetFramework只产出单一目标框架的资产。强名称签名所有程序集统一使用 eng/opensource.snk 签名SignAssemblyTrue保证包内程序集身份稳定。依赖来源由仓库根部的 NuGet.config 锁定为官方nuget.org源clear /清空了其他源还原行为是确定的。小结打包流程与文件职责速查文件在打包链路中的职责dotnet/eng/MetaInfo.props定义VersionPrefix0.4.0与VersionPrefixForAutoGen0_20.2.3dotnet/Directory.Build.props全局IsPackablefalse、Artifacts 输出布局、双目标框架、按项目名分配版本线、强名称签名dotnet/nuget/nuget-package.props接入打包的开关IsPackabletrue 统一元数据 图标/readme 符号包与 SourceLinkdotnet/Directory.Build.targets自动将项目本地README.md作为包 readmedotnet/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),仅供参考