SuperAPI AI 工具集

integrating-sdk-and-msbuild

通用与其它

查看项目

更新于 10-15 21:12

技能介绍

用途:指导在 SDK 与 MSBuild 集成边界上的开发工作,适用于编写或修改 SDK targets、处理 dotnet CLI 到 MSBuild 的调用,以及排查相关集成问题。

主要能力:

  1. 求值边界:说明 MSBuild 求值顺序(环境变量、全局属性、项目级属性、项定义、项),以及 Sdk.props、Directory.Build.props、项目本身、Directory.Build.targets、Sdk.targets 的导入顺序。
  2. 导入规则:SDK props 在用户项目之前导入,SDK targets 在用户项目之后导入;SDK 中的属性默认值必须使用 Condition="'$(Prop)' == ''",避免覆盖用户设置。
  3. 还原与构建分离:还原与构建不得在同一次求值中运行;dotnet build 隐式先还原再构建,--no-restore 跳过还原;/t:Restore;Build 是已知反模式。
  4. 项目引用协议:外层构建通过 _GetProjectReferenceTargetFrameworkProperties 决定内层构建参数,内层构建使用单一 TargetFramework,GetTargetPath 返回输出程序集;多目标项目会派发多次内层构建,外层不得假设单一目标框架,SetTargetFramework 用于传递所选框架。
  5. SDK 上下文中的目标编写:扩展点包括 $(BuildDependsOn)、$(CompileDependsOn)、$(PublishDependsOn)、$(PackDependsOn),BeforeTargets="Build" 应谨慎使用;优先用 DependsOnTargets 明确顺序;增量构建目标需精确声明 Inputs 和 Outputs;需在多目标下测试。
  6. 跨仓库协调:涉及 MSBuild 引擎、SDK targets、NuGet 还原的改动常需协同 PR;建议在两个仓库分别提 issue,先落地 MSBuild 改动,再通过依赖流更新 SDK,并用 SDK 的 MSBuild 集成测试做端到端验证。
  7. 设计时构建:Visual Studio 的设计时构建调用 ResolveProjectReferences 而不调用 Build,设置 $(DesignTimeBuild)=true 与 $(BuildingProject)=false;不应运行的目标需检查这些属性,且设计时构建须保持快速。

限制:资料未提供具体安装命令、版本要求或完整代码示例;实际使用需结合对应仓库文档与测试。