dotnet/project-system

GitHub: dotnet/project-system

Visual Studio 的 .NET 项目系统,提供基于 CPS 框架的托管、多线程、可扩展项目管理能力,统一支持 C#、F# 和 Visual Basic 的 SDK 风格项目。

Stars: 1010 | Forks: 414

# Visual Studio 的 .NET 项目系统 | 发布版本 | 构建 | 合规性 | 发布 | 本地化 |---------------------|:-----------------------:|:----------------------------:|:-------------------------:|:-------------------------: | [main][MainBranch] | [![MainBuild]][MainRun] | [![MainCompliance]][MainRun] | [![MainPublish]][MainRun] | [![MainLocalization]][MainRun] 本代码库包含构建在 [Common Project System (CPS)](https://github.com/microsoft/VSProjectSystem) 框架之上的 [Visual Studio](https://visualstudio.microsoft.com/vs/) .NET 项目系统。此项目系统用于 SDK 风格的 .NET(C#、F# 和 Visual Basic)以及共享项目(C# 和 Visual Basic)项目类型。有关各项目系统之间的功能差异列表,请参阅[功能比较](docs/feature-comparison.md)。 旧的 C# 和 Visual Basic 项目系统(*csproj.dll* 和 *msvbprj.dll*)最早随 Visual Studio .NET 于 2002 年发布。它们一直运行良好,但存在以下特点: - 基于 Native 和 COM - 单线程且绑定到 UI 线程 - 难以在聚合之外通过使用 `` 和[子类型(flavors)](https://learn.microsoft.com/visualstudio/extensibility/internals/project-types)进行扩展 - C# 和 Visual Basic 项目的实现是相互独立的 当前的 .NET 项目系统是: - 托管的且基于托管接口 - 多线程、可扩展且响应迅速 - 易于通过 Managed Extensibility Framework (MEF) 进行扩展和组合。多方(包括第三方)都可以对单一项目系统做出贡献。 - C#、F# 和 Visual Basic 项目的单一实现 ## 什么是项目系统? 项目系统位于磁盘上的项目文件(例如,*.csproj* 和 *.vbproj*)与各种 Visual Studio 功能之间,这些功能包括但不限于,解决方案资源管理器、设计器、调试器、语言服务、构建和部署。几乎所有与项目文件中包含的文件发生的交互都是通过项目系统进行的。 有许多技术结合在一起构成了 .NET 项目系统: - [MSBuild](https://github.com/dotnet/msbuild) 提供构建引擎和文件格式。 - [SDK](https://github.com/dotnet/sdk) 提供用于构建、运行以及与 .NET 项目交互的命令行界面,以及必要的 MSBuild 任务和目标。 - [Common Project System](https://github.com/microsoft/VSProjectSystem) 提供项目系统的基础构建块,包括(但不限于)项目树、构建和调试器协调以及 Visual Studio 集成。 - [Roslyn](https://github.com/dotnet/roslyn) 提供 C# 和 Visual Basic 语言支持,包括编译器、IntelliSense、重构、分析器和代码修复。 - [Visual F# tools](https://github.com/dotnet/fsharp) 提供 F# 语言支持。 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/d63f58a763195808.png) ## 如何构建本代码库? 本代码库基于 .NET Framework 构建,需要 .NET Framework 版本的 [MSBuild](https://learn.microsoft.com/visualstudio/msbuild/msbuild?view=vs-2022) 才能成功构建。此外,由于 .NET 项目系统是作为 Visual Studio 扩展捆绑部署到 Visual Studio 中的,因此对 [Visual Studio SDK](https://learn.microsoft.com/visualstudio/extensibility/starting-to-develop-visual-studio-extensions?view=vs-2022) 存在依赖关系。 以下是获取必要组件的方法: - 安装最新版本的 [Visual Studio](https://visualstudio.microsoft.com/downloads/) - 在安装过程中选择以下工作负载: - .NET 桌面构建工具 - Visual Studio 扩展开发 ![image](https://static.pigsec.cn/wp-content/uploads/repos/2026/05/22728527cc195809.png) 安装必要组件后,只需运行代码库根目录下的 `build.cmd` 批处理文件。这将根据情况对代码库进行构建、测试和打包。 ### **build.cmd** 标志 提供给 **build.cmd** 的所有命令行参数都会被转发给 MSBuild。我们为构建此代码库设置了一些特殊属性。 - 对于项目: - `/p:SrcProjects=[true or false]`:包含 **src** 目录中的项目。默认值:`true` - `/p:TestProjects=[true or false]`:包含 **tests** 目录中的项目。默认值:`true` - `/p:SetupProjects=[true or false]`:包含 **setup** 目录中的项目。默认值:`true` - 对于目标: - `/p:Restore=[true or false]`:运行 **Restore** 目标以获取项目依赖项。默认值:`true` - `/p:Build=[true or false]`:运行 **Build** 目标以将项目编译为程序集。默认值:`true` - `/p:Rebuild=[true or false]`:运行 **Rebuild** 目标,该目标会清理并重新构建项目。默认值:`false` - `/p:Test=[true or false]`:运行 **Test** 目标以执行 xUnit 测试项目。默认值:`true` - `/p:Pack=[true or false]`:运行 **Pack** 目标以将项目打包到 NuGet 包中。默认值:`true` ## 如何参与和贡献? 我们欢迎您进行试用、[提交问题](https://github.com/dotnet/project-system/issues)、提出功能请求,并加入我们的设计讨论。如果您正在寻找可以参与的工作,请查看我们的[求助问题](https://github.com/dotnet/project-system/issues?q=is%3Aopen+is%3Aissue+label%3A%22Help+Wanted%22),这是一个很好的起点。此外,请查阅我们的[贡献指南](CONTRIBUTING.md)。 本项目采用了改编自[贡献者公约](https://www.contributor-covenant.org)的行为准则,以明确我们社区的预期行为。该行为准则已被[许多其他项目采用](https://www.contributor-covenant.org/adopters/)。有关更多信息,请参阅[贡献者行为准则](https://github.com/dotnet/home/blob/master/guidance/be-nice.md)。 ## 商标 本项目可能包含项目、产品或服务的商标或徽标。授权使用 Microsoft 商标或徽标受[Microsoft 商标与品牌指南](https://www.microsoft.com/legal/intellectualproperty/trademarks/usage/general)的约束并必须遵守该指南。在本项目的修改版本中使用 Microsoft 商标或徽标不得引起混淆或暗示 Microsoft 的赞助。任何第三方商标或徽标的使用均受制于这些第三方的政策。 ## 数据收集 本软件可能会收集有关您及您对本软件使用情况的信息,并将其发送给 Microsoft。Microsoft 可能会使用此信息来提供服务并改进我们的产品和服务。您可以按照 [“Visual Studio 客户体验改进计划”](https://learn.microsoft.com/visualstudio/ide/visual-studio-experience-improvement-program) 中的说明关闭遥测。本软件中的某些功能还可能使您和 Microsoft 能够从您的应用程序用户那里收集数据。如果您使用这些功能,您必须遵守适用的法律,包括向您的应用程序用户提供适当的通知以及 Microsoft 隐私声明的副本。我们的隐私声明位于 https://go.microsoft.com/fwlink/?LinkID=824704。您可以在帮助文档和我们的隐私声明中了解有关数据收集和使用的更多信息。您对本软件的使用即表示您同意这些做法。
标签:COM, Common Project System, CPS, csproj, F#, IDE, macOS, Managed Extensibility Framework, MEF, MSBuild, SDK风格项目, SOC Prime, vbproj, Visual Basic, Visual Studio, VSProjectSystem, 共享项目, 原生代码转托管代码, 可视化设计器, 开发工具, 开源, 微软, 扩展性, 插件开发, 系统架构, 编译器, 解决方案资源管理器, 语言服务, 调试, 软件开发, 项目文件, 项目系统