用途:教智能体读取并安全修改 SDK 风格 .csproj 文件,覆盖项目结构、PropertyGroup 约定、ItemGroup 模式、条件表达式、Directory.Build.props/.targets 和集中包管理(Directory.Packages.props)。前提为 .NET 8.0+ SDK、仅限 SDK 风格项目,MSBuild 随 SDK 提供;不覆盖旧格式 .csproj、项目组织与 SDK 选择、构建错误解读、常见编码错误(由其他技能负责)。
主要能力:
- 结构:<Project Sdk="..."> 导入默认 props/targets,自动包含 **/*.cs 等默认 glob;可切换 SDK 类型(如 Microsoft.NET.Sdk.Web),并用 EnableDefaultCompileItems 或 EnableDefaultItems 关闭默认包含。可用 head -1 src/MyApp/MyApp.csproj 查看 SDK 属性。
- PropertyGroup:TargetFramework(多目标用 TargetFrameworks)、Nullable、ImplicitUsings、OutputType(Exe/Library)、RootNamespace、AssemblyName、LangVersion,以及 TreatWarningsAsErrors。
- ItemGroup:PackageReference(含 Version、PrivateAssets、IncludeAssets)、ProjectReference(路径用正斜杠)、None/Content/EmbeddedResource(CopyToOutputDirectory)。推荐命令:dotnet add src/MyApp/MyApp.csproj package Microsoft.EntityFrameworkCore --version 9.0.0;dotnet add src/MyApp.Api/MyApp.Api.csproj reference src/MyApp.Core/MyApp.Core.csproj。
- 条件与多目标:Condition 表达式支持 ==、!=、StartsWith、Contains、空值判断、Exists('path');可按 TFM、Configuration、CI 或平台条件设置属性和包引用。
- Directory.Build.props/.targets:props 在项目前导入,用于可被覆盖的默认属性与包元数据;targets 在项目后导入,用于依赖项目属性的项、分析器与自定义 Target。查找时最近的文件会遮蔽父级,如需链式继承要显式 Import。
- CPM:在解决方案根放 Directory.Packages.props,设 ManagePackageVersionsCentrally=true,用 PackageVersion 集中版本,项目内 PackageReference 不写 Version;可用 grep 查找带 Version 的引用。
限制:资料未提供收费、价格、平台支持范围、效果数据;旧格式 .csproj、构建错误解读等不在本技能范围内。