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

Posted

技术标签:

【中文标题】为啥要创建 ASP.NET 5 类库项目?【英文标题】: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 类库,请改用它。 【参考方案1】:

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

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

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

以上是关于为啥要创建 ASP.NET 5 类库项目?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 asp.net 5 项目中启用迁移(EF6)?

Asp.Net 5 类库中未引用 Mscorlib

Asp.net MVC 项目管理

将ASP.NET Identity模型移动到类库

Asp.Net 与 EF 更好的项目结构

ASP.NET Core实现类库项目读取配置文件