在开发Beta环境下的应用程序时,经常会遇到各种挑战,比如频繁的故障、频繁的变更,以及需要持续关注的问题。最近的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"
}
}
所有这些依赖项可能对项目并不都是必需的,但这是一个正在工作的项目的示例。
可能还会注意到之前显示的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之后,可能需要更新位于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>