在这篇博客中我将探索一些关于Asp.net core 3.0应用的基础功能——.csproj 项目文件和Program源文件。我将会描述他们从asp.net core 2.X在默认模版中是怎样改变的,以及探讨Aspnetcore3.0使用的Api的变化。
***
.Net core 3.0 会在九月23号的 NET Conf上发布,但现在已经有一个支持的预览版本(Preview 8)。最新的预览版本与最终发布版本不可能有太多的变化,所以现在是开始尝试和查看3.0增加的功能的好时机。
Net core 3.0主要的更新是把windows桌面应用运行了Net core 上,但是Asp Net core 也增加了很多东西。也许最大的新特性就是(我个人最感兴趣的是客户端的版本,但是现在还不可用),但是也有一些迭代的改变和新特性加入了Asp Net Core。
在这篇博客中,我将探索一些关于非常 “基础” 的更新。
Microsoft.AspNetCore.App metapackage在nuget已经不再可用
Asp net core 已经选择 GnericHost 来取代 WebHost
如果你打算把Asp net Core 2.X 软件迁移到3.0 ,一定要查阅迁移指南
在这篇博客中,当你创建一个新的Asp Net core应用时,比如 你用dotnet new webapi,我将探索.csproj 文件和Program.cs文件。在文章的最后,我将比较StartUp文件相对于2.X版本是怎样变化的,以及Asp Net core 中使用中的模版有什么不同(比如 web,webapi,mvc)
***
当你创建完一个新的Asp Net core项目,然后打开.csproj文件,它基本上是如下的样子:
<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.0</TargetFramework> </PropertyGroup> </Project>如果你与Asp net core 2.X的项目文件做比较,主要有如下的相同点和不同点
<TargetFramework> 不再是netcoreapp2.1或者2.2 ,而是netcoreapp3.0了,这是因为我们把目标框架2.1/2.2 替换成了3.0
<Project> 元素仍然是 Microsoft.Net.Sdk.Web,虽然已经更新成了ASP.NET Core 3.0,但是你的项目文件中的语法仍然是没有变化
Microsoft.AspNetCore.App meta 包已经不存在。
这里的最后一个有意思的变更。在我之前的博客中提到,在Asp Net core2.X你引用一个名叫Microsoft.AspNetCore.App的共享框架元数据包。这个共享框架提供了大量的好处,比如避免你在你的应用中手动安装所有的独立的程序包以及允许你使用 运行时的向前滚动更新的特性。
在Asp Net core3.0中,微软已经不再以Nuget元数据包的形式发布这个共享框架,也不存在3.0.0版本的Microsoft.AspNetCore.App。这个共享框架仍然和以前一样通过Net core 安装,但是在3.0中你的使用略有不同。
在Asp Net core2.X 中,为了引用这个共享框架,你会添加如下代码到你的项目文件中:
<ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" /> </ItemGroup>相反,在3.0中你要使用 <FrameworkReference> 元素
<ItemGroup> <FrameworkReference Include="Microsoft.AspNetCore.App" /> </ItemGroup>“但是停一下”,你说:“为什么我的Asp Net Core 项目文件没有这个?”
这是个好问题,答案是 Microsoft.Net.Sdk.Web 默认包含了。
***
在3.0中另外一个最大的变更是你不再需要独立安装共享框架的其他部分的Nuget程序包了。例如,在Asp Net Core 2.X中,你可以用 像 Microsoft.AspNetCore.Authentication或Microsoft.AspNetCore.Authentication这样的独立的程序包来替换依赖于整个框架的程序包:
<ItemGroup> <PackageReference Include="Microsoft.AspNetCore.Authentication" Version="2.1.0"/> <PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.1.0"/> </ItemGroup>这通常对库最有用,因为应用程序总是需要依赖于共享框架。然而,在 Net Core3.0中,这一切都不可能了。这些Nuget包不会在发布了。相反,如果你需要在你的项目中引用其中的类库,你必须添加这个 <FrameworkReference> 元素到你的项目中
例如EF Core和social authentication providers 这些程序包中另外一个需要注意的事情是它们也不再是共享框架的一部分了,如果你需要使用这些程序包,你必须手动从nuget上安装到你的项目中。
对于这些程序包的完整清单,查阅这个Github issue
***
Asp Net Core 3.0中的Proram.cs文件第一眼看上去与2.X版本的非常相似。但是已经有许多类型发生了改变,这是因为在Net Core 3.0中,Asp Net Core为了运行在通用host上已经进行了重新构建,使用独立的Web Host已经被替代。
public class Program { public static void Main(string[] args) { CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }