【问题标题】:Why create an ASP.NET 5 Class Library project?为什么要创建 ASP.NET 5 类库项目?
【发布时间】:2015-03-18 00:31:35
【问题描述】:

我试图弄清楚“ASP.NET 5 类库”(vNext) C# 项目与 ASP.NET 有什么关系。为什么要使用此模板创建项目,而不仅仅是常规的 C#“类库”项目?

我喜欢新功能,比如 project.json 文件而不是 .csproj 文件等,但是当项目与 ASP.NET 无关时,创建“ASP.NET”类库似乎不合适或IIS等。这只是业务逻辑层的一个项目。一个新的 WebApi ASP.NET 网站最终将引用该项目,但目前不相关。

只是名字不好?是否应该只将其称为“vNext 类库”而不使用看起来像 Web 应用的图标?

【问题讨论】:

  • 是否有估计他们认为何时可以添加类型良好的旧类库的现有项目?这是我期望将 MVC 5 迁移到 ASP.NET 5 MVC 6 迁移的最后一个想法。
  • “ASP.NET 5 类库”的框架与 ASP .NET Core 不同,但 core 有自己的 Core 类库,请改用它。

标签: c# asp.net asp.net-mvc asp.net-core


【解决方案1】:

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

与类库项目 (.csproj) 相比,ASP.NET 5 类库项目 (.kproj) 有许多好处:

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

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

为什么名称中有“ASP.NET”?

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

  • .NET 控制台应用程序(跨平台)
  • .NET 类库(跨平台)

2015 年 5 月 13 日更新

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

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

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

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

【讨论】:

  • 你能扩展#2 - 你的意思是智能感知建议一个API,然后为你下载nuget包吗?我输入 JQuery,它会给我吗?
  • @Simon_Weaver 我的意思是,虽然常规类库项目只生成一个 DLL 和 PDB,但新的类库项目会生成一个可以上传到 nuget.org 的 NUPKG(NuGet 包)。
  • .kproj 此后已重命名为 .xproj
【解决方案2】:

这是一个有趣的观察,当前模板将生成一个与 ASP.NET 5 运行时兼容的类库。您无法从普通的 C# 类库中获得它。

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

【讨论】:

  • 我会关注您的问题,谢谢。显然与“ASP.NET 5 控制台应用程序”相同的命名问题。也许应该称为“vNext 控制台应用程序”,否则开发人员可能会将其与 ASP.NET 网站的某种控制台应用程序混淆。也许模板的位置应该从“Visual C# --> Web”移动到“Visual C# --> vNext”
  • github issue 已关闭。更好的项目名称 - 谢谢:github.com/aspnet/Home/issues/281
【解决方案3】:

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

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

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

【讨论】:

  • 是不是名字不好?和 ASP.NET 没有关系?
  • ASP.NET 5 的主要目标之一是允许它跨平台运行。有人问“不应该将其称为 .NET Core 吗?”至少目前微软的多平台方法只针对 Web(和控制台应用程序),不支持 Java 等桌面开发。为了强调它是关于网络的,他们将其全部命名为“ASP.NET 5”。如果你想生成一个跨平台运行的库,它应该是一个 ASP.NET 5 类库。
  • 这意味着当我的老板问“ASP.NET 是不是最好的技术”时,我可以告诉他“是”——这就是为什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-06
  • 2021-07-23
  • 2016-04-22
  • 1970-01-01
  • 2018-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多