十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何在 aspnetcore 仓库新增一个项目并注册到解决方案过滤器与构建列表

如何在 aspnetcore 仓库新增一个项目并注册到解决方案过滤器与构建列表 如何在 aspnetcore 仓库新增一个项目并注册到解决方案过滤器与构建列表【免费下载链接】aspnetcoreASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.项目地址: https://gitcode.com/GitHub_Trending/as/aspnetcore在 aspnetcore 仓库里贡献一个新功能模块时不能只创建一个.csproj项目必须进入对应的解决方案过滤器.slnf、被构建系统的项目列表识别eng/ProjectReferences.props等自动生成文件如果放在根src目录下的新区域还要手动登记进 eng/Build.props 的构建 glob 列表否则日常构建和 Helix 测试子集都不会覆盖它。本文按 docs/AddingNewProjects.md 与 docs/ReferenceResolution.md 给出的流程完整走一遍这条注册路径。适用前提是你在 Windows 上使用 Visual Studio 打开仓库文档以 VS 向导为主要操作入口并且本地能运行eng/scripts/GenerateProjectList.ps1所依赖的 MSBuild 工具链该脚本内部通过 eng/common/msbuild.ps1 执行 eng/CodeGen.proj 的GenerateProjectList目标。第一步创建符合仓库约定的项目结构按照 docs/AddingNewProjects.md 的要求创建一个新文件夹存放.csproj及项目相关文件。文档标注 EXTREMELY IMPORTANT在这个新文件夹内再建一个放源码的子文件夹。常规功能项目该子文件夹命名为src如果是测试项目等其它类型用更贴切的名字例如test/。src项目还需要注意几件事.csproj文件名要与程序集名一致docs/ReferenceResolution.md 的建议。用Reference而不是PackageReference或ProjectReference后者仅允许在测试项目中使用。构建系统会把Reference解析成正确类型和版本实现细节见 eng/targets/ResolveReferences.targets。需要新包时把包加到 eng/Dependencies.props 和 eng/Versions.props来自其他 dotnet 团队、需要自动更新的包还要在 eng/Version.Details.xml 里登记其余包则加进 eng/tools/DependabotDiscovery/DependabotDiscovery.csproj。添加两个公共 API 清单文件PublicAPI.Shipped.txt已发布、不可更改的 API和PublicAPI.UnShipped.txt未发布、仍可变的 API。空模板在 eng/PublicAPI.empty.txt复制后按上面的名字重命名放入项目目录。若PublicAPI.UnShipped.txt配置不正确会直接产生构建错误VS 会以绿色波浪线提示按Ctrl .打开 Quick Actions 选择加入公共 API 即可。如需暴露内部实现给测试项目在.csproj中写(InternalsVisibleTo)例如ItemGroup InternalsVisibleTo IncludeMicrosoft.AspNetCore.My.TestProject / /ItemGroup第二步把项目注册进解决方案与解决方案过滤器用 startvs.cmd 这类与各.slnf同目录的脚本打开仓库而不是直接找根解决方案。以 src/Middleware/Middleware.slnf 为例它是一份指向根解决方案AspNetCore.slnx的过滤器文件列出该区域内要加载的.csproj{ solution: { path: ..\\..\\AspNetCore.slnx, projects: [ src\\Antiforgery\\src\\Microsoft.AspNetCore.Antiforgery.csproj, src\\Antiforgery\\test\\Microsoft.AspNetCore.Antiforgery.Test.csproj ] } }文档给出的操作流程是在 VS 中新建一个Solution Folder名字和位置与第一步创建的实际文件夹一致即在.slnf里对应你新建目录的位置。通过 VS 的Add菜单创建项目选中该文件夹 - 右键 - Add - New Project... - 按向导完成。正常情况下VS 会自动把你的.csproj写进根解决方案文件本仓库为 AspNetCore.slnx和你要加入的.slnf。如果 VS 没有改动这些文件手动处理打开目标.slnf若还没有对应项目的 solution folder 就先建一个然后右键 solution folder - Add - Existing Project... - 按向导选择你的.csproj。文档补充说明如果只是想在 VS 里手动新增或修正 solution filter 文件VS 自身在发现格式问题时通常会提示并给出修复建议多数情况下保存文件即可触发自动修复。第三步重新生成项目列表文件完成注册后运行powershell -File eng/scripts/GenerateProjectList.ps1该脚本支持可选的-ci开关用于 CI 场景。它的实际动作见 eng/scripts/GenerateProjectList.ps1是调用eng/common/msbuild.ps1对 eng/CodeGen.proj 执行GenerateProjectList目标扫描仓库项目后重写以下自动生成文件文件头部都带有 Run./eng/scripts/GenerateProjectList.ps1to update 的提示eng/ProjectReferences.props程序集名到构建该程序集的项目路径的映射条目形如ProjectReferenceProvider IncludeMicrosoft.AspNetCore.Antiforgery ProjectPath$(RepoRoot)src\Antiforgery\src\Microsoft.AspNetCore.Antiforgery.csproj /eng/ShippingAssemblies.props本仓库所有出货程序集列表eng/SharedFramework.Local.props共享框架程序集完整列表eng/TrimmableProjects.props标注了 trimming 的项目eng/RequiresDelayedBuildProjects.props需要在 App.Ref 和 App.Runtime 构建完成之后再 restore/build 的项目。把项目放进根 src 目录时手动登记构建列表文档特别指出如果新增项目位于根src目录下的新文件夹还必须编辑 eng/Build.props在两个列表里各加一条 globProjectsWithTestsSubset1/ProjectsWithTestsSubset2条件为$(BuildMainlyReferenceProviders) ! true的那个列表按目录整体匹配把你的目录加到条目较少的那个 Subset 里ProjectsWithTestsSubsetN Include $(RepoRoot)src\[YOUR FOLDER]\**\*.csproj; ... DotNetProjects列表条件为$(BuildMainlyReferenceProviders) true只匹配src子目录注意路径里多出来的第二段srcDotNetProjects Include $(RepoRoot)src\[YOUR FOLDER]\**\src\*.csproj; ... 上面两处[YOUR FOLDER]都替换为你第一步创建的根src目录名。文件内的注释也提示了同样规则新增项目应加到ProjectsWithTestsSubset1或ProjectsWithTestsSubset2中条目更少的那个。这两个 Subset 同时决定 Helix 上按$(HelixSubset)1/2 划分的工作项条目较少的 Subset 也承担平衡两边工作量的作用。可选把项目纳入 Shared Framework只有当你的项目要成为共享框架的一部分时才做这一步在项目.csproj的PropertyGroup中加IsAspNetCoreApptrue/IsAspNetCoreApp重新运行eng/scripts/GenerateProjectList.ps1你的项目会出现在 eng/SharedFramework.Local.props如适用还会进入 eng/TrimmableProjects.props。把项目名加入 src/Framework/test/TestData.cs 中的清单并保持字母序。文档说明这一步不是项目运行所必需但 CI 上有一个测试会因缺失而失败。验证如何判断注册成功按以下顺序核对均来自文档描述的机制过滤器与解决方案用对应的startvs.cmd它等价于执行startvs.cmd 区域名.slnf见 src/Antiforgery/startvs.cmd打开 VS确认新项目和 solution folder 都出现在过滤器中VS 发现.slnf格式问题时会提示并给出修复。生成文件运行GenerateProjectList.ps1后在 eng/ProjectReferences.props 中搜索你的程序集名应出现一条ProjectReferenceProvider映射到$(RepoRoot)src\你的目录\...\*.csproj的条目纳入 SharedFx 的项目同时应出现在 eng/SharedFramework.Local.props。构建反馈若PublicAPI.UnShipped.txt缺失或未登记新 API构建会报公共 API 错误VS 中为绿色波浪线提示按Ctrl .Quick Actions 补录。根 src 新项目确认 eng/Build.props 的两个列表都包含你的目录 glob未登记时该目录的项目不会出现在默认 managed 构建集合中。纳入 SharedFx 的项目确认 src/Framework/test/TestData.cs 清单已按字母序加入项目名否则 CI 测试会失败。文档还提供了一个可对照的最终成果示例官方指出一笔完成该流程的 PRdocs/AddingNewProjects.md 开头的 sample PR 链接改动范围与本文步骤一致新目录 src子目录、.slnf/解决方案注册、生成文件更新。限制与注意整个流程以 Visual Studio 为主要操作入口文档没有给出脱离 VS 的纯命令行注册方式.slnf/解决方案文件的手动编辑可行但文档建议优先依赖 VS 的自动维护与修复提示。ProjectReference只允许出现在测试项目中非测试项目依赖一律走Referenceeng/Dependencies.props体系。eng/*.props系列文件ProjectReferences.props、SharedFramework.Local.props、TrimmableProjects.props、RequiresDelayedBuildProjects.props全部是自动生成的不要手改统一通过GenerateProjectList.ps1更新。【免费下载链接】aspnetcoreASP.NET Core is a cross-platform .NET framework for building modern cloud-based web applications on Windows, Mac, or Linux.项目地址: https://gitcode.com/GitHub_Trending/as/aspnetcore创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表