为什么要创建 ASP.NET 5 Class 库项目?

Why create an ASP.NET 5 Class Library project?

我想弄清楚 "ASP.NET 5 Class Library" (vNext) C# 项目与 ASP.NET 有什么关系。为什么要使用此模板创建项目而不是仅使用常规 C# "Class Library" 项目?

我喜欢新功能,比如project.json文件而不是.csproj文件等,但是在项目时创建"ASP.NET" class库似乎不对与 ASP.NET 或 IIS 等无关。它只是业务逻辑层的项目。一个新的 WebApi ASP.NET 网站最终将引用该项目,但此时与此无关。

只是名字不好吗?它应该只被称为 "vNext Class Library" 而不是使用看起来像网络应用程序的图标吗?

据我了解,一个好处是 ASP.NET5 Class 库项目的最终产品是一个 NuGet 程序包(而不仅仅是 .dll 程序集)。

您可以通过右键单击 Visual Studio 2015 中的项目并选择 "Publish..." 选项来生成 NuGet 包。或者您可以在命令行中使用 "KPM pack"。

此外,您还可以使用 ASP.NET 5 Core 运行时间,以便您的库可以 运行 跨平台。

这是一个有趣的观察,当前模板将生成与 ASP.NET 5 运行时兼容的 class 库。你不会从普通的 C# class 库中得到它。

我提交了以下问题来跟踪这个设计问题 - https://github.com/aspnet/Home/issues/281

为什么要创建一个 ASP.NET 5 Class 库项目?

ASP.NET 5 Class 库项目 (.kproj) 优于 Class 库项目 (.csproj ):

  1. ASP.NET 5 class 库轻松支持 cross-compiling 项目到多个目标,例如 aspnet50aspnetcore50net45 和各种其他便携式 class 库变体。这包括对 Intellisense 的丰富 Visual Studio 支持,以通知您哪些 API 可用于哪些目标。
  2. NuGet 包是自动创建的,这是对 class 库非常常见的事情。
  3. 在文件系统更改时自动刷新解决方案资源管理器等方面的工作效率更高。尝试合并 *.csproj 文件中的冲突更改时,源代码管理中的冲突更少。
  4. 可以编译cross-platform(部分原因是它不依赖于 MSBuild)

您可以从 *.kproj 项目引用 *.csproj 项目(Visual Studio 2015 的新预览使这变得更加容易),但始终可以通过一些手动步骤实现。

为什么名字里有"ASP.NET"?

就名称而言,它是历史的遗迹,很快就会得到解决。新项目类型的用处远远超过 ASP.NET 5 个应用程序。期待在 Visual Studio 的未来预览中看到新名称:

  • .NET 控制台应用程序(Cross-platform)
  • .NET Class 库 (Cross-platform)

2015 年 5 月 13 日更新

随着 Visual Studio 2015 RC 的发布,您可以看到更新后的项目模板名称:

  • Class 库(包)
  • 控制台应用程序(包)

这些使用 project.json 文件和 .NET 执行环境 (DNX) 构建、运行 和打包(到 NuGet 包中)项目。

这些项目模板继续显示在 "Web" 节点下的“新建项目”对话框中,但现在也显示在主 "Visual C#" 节点中。