组织项目以支持 .NET Framework 和 .NET CoreOrganize your project to support both .NET Framework and .NET Core

本文内容

了解如何创建一个并行编译 .NET Framework 和 .NET Core 的解决方案。查看几个选项来组织项目以帮助你实现此目标。以下是决定如何使用 .NET Core 设置项目布局时要考虑的一些典型方案。此列表可能无法涵盖所有要求;这些方案的优先级具体取决于项目需求。

此方案的好处:

  • 通过编译单个项目(而非多个项目)简化生成过程,每个项目针对不同的 .NET Framework 版本或平台。
  • 由于需要管理单个项目文件,因此简化了多目标项目的源文件管理。添加/删除源文件时,需要手动将备用文件与其他项目进行同步。
  • 轻松生成可供使用的 NuGet 包。
  • 允许通过使用编译器指令为库中特定的 .NET Framework 版本编写代码。不支持的方案:

  • 要求开发者使用 Visual Studio 2017 来打开现有项目。若要支持 Visual Studio 的早期版本,建议将项目文件保存在不同的文件夹中

此方案的好处:

  • 继续支持现有项目的开发,而无需为没有安装 Visual Studio 2017 的开发人员/参与者进行升级。
  • 减少现有项目中出现新 bug 的可能性,因为这些项目中不需要进行任何代码改动。

示例Example

请考虑以下存储库:

现有项目

源代码

根据现有项目的约束和复杂性,有几种不同的方法可为此存储库添加对 .NET Core 的支持,下面描述了这些方法。

将现有项目替换为多目标的 .NET Core 项目Replace existing projects with a multi-targeted .NET Core project

重新组织存储库,以便删除任何现有的 .csproj 文件,并创建以多个框架为目标的单一 .csproj 文件。这是一项不错的选择,因为单个项目可以编译不同的框架。它还可以处理每个目标框架的不同编译选项和依赖项。

创建以多个框架为目标的 csproj

源代码

需注意的更改:

  • 用新的 .NET Core *.csproj 替换 packages.config 和 *.csproj。NuGet 包是使用 <PackageReference> ItemGroup 指定的。

保留现有项目并创建 .NET Core 项目Keep existing projects and create a .NET Core project

如果存在以较旧框架为目标的现有项目,可能需要保留这些项目并将 .NET Core 项目用作将来框架的目标。

位于不同文件夹中的现有项目与 .NET Core 项目

源代码

需注意的更改:

  • 将 .NET Core 项目和现有项目保存在不同的文件夹中。
    • 将项目保存在不同的文件夹中可以避免强制使用 Visual Studio 2017。可以创建仅打开旧项目的单独解决方案。

请参阅See also

有关迁移到 .NET Core 的详细指南,请参阅 .NET Core 移植文档