ASP.NET Beta8版本更新指南

在开发Beta环境下的应用程序时,经常会遇到各种挑战,比如频繁的故障、频繁的变更,以及需要持续关注的问题。最近的Beta8版本也不例外。因此,将花几分钟时间总结一下可能会遇到的一些陷阱,以及为了让一切顺利运行需要做的一些事情。

获取最新的Beta8环境

获取Beta8环境的方法有很多,但如果使用Visual Studio作为主要的开发环境,那么可以很容易地下载以下安装程序,以添加所有必要的工具,以针对这个最新版本:

安装并重新启动Visual Studio后,应该拥有了继续工作所需的一切。

最简单的变更将是简单地更新当前的依赖项,以针对它们自己的Beta8版本。可以通过简单地打开project.json文件并按预期更新版本来做到这一点(即从-betaX-beta8):

例如,project.json文件可能看起来像这样:

{ "dependencies": { "EntityFramework.SqlServer": "7.0.0-beta8", "EntityFramework.Commands": "7.0.0-beta8", "Microsoft.AspNet.Mvc": "6.0.0-beta8", "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta8", "Microsoft.AspNet.Diagnostics": "1.0.0-beta8", "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta8", "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta8", "Microsoft.AspNet.StaticFiles": "1.0.0-beta8", "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta8", "Microsoft.Framework.Configuration.Json": "1.0.0-beta8", "Microsoft.Framework.Configuration.UserSecrets": "1.0.0-beta8", "Microsoft.Framework.Logging": "1.0.0-beta8", "Microsoft.Framework.Logging.Console": "1.0.0-beta8", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta8", "Microsoft.AspNet.Server.Kestrel": "1.0.0-beta8", "Microsoft.AspNet.IISPlatformHandler": "1.0.0-beta8", "EntityFramework.Core": "7.0.0-beta8", "Microsoft.Dnx.Runtime": "1.0.0-beta8", "Microsoft.ApplicationInsights.AspNet": "1.0.0-beta8" } }

所有这些依赖项可能对项目并不都是必需的,但这是一个正在工作的项目的示例。

迁移到Kestrel和依赖项变更

可能还会注意到之前显示的project.json文件中的一些其他变更。这是因为这个最新版本对托管模型进行了一些变更,特别是针对IIS的。

需要在project.json文件中执行以下变更:

  • Microsoft.AspNet.Server.IIS的依赖项替换为Microsoft.AspNet.IISPlatformHandler
  • Microsoft.AspNet.Server.WebListener的依赖项替换为Microsoft.AspNet.Server.Kestrel
  • 更新commands部分中的web命令,以通过"commands": { "web": "Microsoft.AspNet.Server.Kestrel" ... }来定位Kestrel

因此,在这些变更之后,project.json文件应该看起来像这样:

{ "dependencies": { "EntityFramework.SqlServer": "7.0.0-beta8", "EntityFramework.Commands": "7.0.0-beta8", "Microsoft.AspNet.Mvc": "6.0.0-beta8", "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta8", "Microsoft.AspNet.Diagnostics": "1.0.0-beta8", "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta8", "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta8", "Microsoft.AspNet.StaticFiles": "1.0.0-beta8", "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta8", "Microsoft.Framework.Configuration.Json": "1.0.0-beta8", "Microsoft.Framework.Configuration.UserSecrets": "1.0.0-beta8", "Microsoft.Framework.Logging": "1.0.0-beta8", "Microsoft.Framework.Logging.Console": "1.0.0-beta8", "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta8", "Microsoft.AspNet.Server.Kestrel": "1.0.0-beta8", "Microsoft.AspNet.IISPlatformHandler": "1.0.0-beta8", "EntityFramework.Core": "7.0.0-beta8", "Microsoft.Dnx.Runtime": "1.0.0-beta8", "Microsoft.ApplicationInsights.AspNet": "1.0.0-beta8" }, "commands": { "web": "Microsoft.AspNet.Server.Kestrel", "ef": "EntityFramework.Commands" } }

这应该就是依赖项和任何project.json文件的变更。接下来,将看看需要做的一些基于代码的变更。

启动变更

Startup.cs文件中也需要做一些小的变更。

以前,可以通过构造函数来定义应用程序的基路径,如下所示:

var builder = new ConfigurationBuilder(appEnv.ApplicationBasePath).Etc();

现在不再这样了,构造函数的方法已经被更改为使用SetBasePath()方法:

var builder = new ConfigurationBuilder().SetBasePath(appEnv.ApplicationBasePath).Etc();

应用程序中的错误处理也发生了变化。以前,可能会使用以下代码片段来引用错误页面并实际处理错误:

if (env.IsDevelopment()) { // Omitted for brevity app.UseErrorPage(); } else { // Omitted for brevity app.UseErrorHandler("/YourController/YourErrorAction"); }

在这个版本中,UseErrorPage()被替换为UseDeveloperExceptionPage()UseErrorHandler()被替换为UseExceptionHandler()

if (env.IsDevelopment()) { // Omitted for brevity app.UseDeveloperExceptionPage(); } else { // Omitted for brevity app.UseExceptionHandler("/YourController/YourErrorAction"); }

最后一个变更与之前提到的Kestrel变更有关。如果打算使用IIS来托管应用程序,将需要在Configure()方法中添加以下代码行:

app.UseIISPlatformHandler();

最后一个主要变更涉及到服务以及它们是如何被引用的。如果使用第三方网站来处理认证,比如Twitter或Facebook,可能会发现需要改变这些服务的连接方式。

以前的调用可能看起来像这样:

services.Configure(options => { options.AppId = Configuration["Authentication:Twitter:AppId"]; options.AppSecret = Configuration["Authentication:Twitter:AppSecret"]; });

将会稍微改变,并将使用一个更具体的调用方法,如下所示:

app.UseFacebookAuthentication(options => { options.AppId = Configuration["Authentication:Twitter:AppId"]; options.AppSecret = Configuration["Authentication:Twitter:AppSecret"]; });

这基本上就是关于Startup.cs文件的全部内容。

其他变更

还有一些其他的小变更也值得注意:

  • 在控制器中,Context的使用已经被替换为HttpContext
  • 项目根目录下的hosting.ini文件已被弃用。

配置Kestrel和web.config

迁移到Kestrel之后,可能需要更新位于wwwroot目录下的web.config文件,以正确配置HTTP处理器,如下所示:

<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <handlers> <add name="httpPlatformHandler" path="*" verb="*" modules="httpPlatformHandler" resourceType="Unspecified" /> </handlers> <httpPlatform processPath="%DNX_PATH%" arguments="%DNX_ARGS%" forwardWindowsAuthToken="false" startupTimeLimit="3600" /> </system.webServer> </configuration>
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485