升级到ASP.NET 5 beta5后出现故障

5

我在更新到beta5时按照这个指南操作,更新过程似乎已经成功了。

http://blogs.msdn.com/b/webdev/archive/2015/06/30/asp-net-5-beta5-now-available.aspx

按照以下步骤升级到ASP.NET 5 Beta5:

  • 如果您还没有安装.NET版本管理器(DNVM),请安装它(Visual Studio 2015 RC自带,或者您可以获取最新版本)
  • 从命令提示符中将DNX_FEED环境变量设置为https://www.nuget.org/api/v2
  • 运行“dnvm upgrade”在您的应用程序中,将全局.json更新为指向.NET执行环境(DNX)的beta5版本
  • 同时将您的project.json更新为指向beta5包版本
  • 运行“dnu restore”运行“dnu build”并根据需要将您的代码迁移到beta5

然而,我遇到了构建错误,说我缺少一些程序集。它抱怨System.Void之类的东西缺失。它也找不到来自Microsoft.AspNet.MVC的Controller :/

如果我恢复到beta4,那么它就可以正常工作。

我错过了哪个步骤?

DNVM list(已恢复为beta4)

Active Version           Runtime Architecture Location                      Ali
                                                                            as
------ -------           ------- ------------ --------                      ---
       1.0.0-beta4       clr     x64          C:\Users\MySelf\.dnx\runtimes
  *    1.0.0-beta4       clr     x86          C:\Users\MySelf\.dnx\runtimes
       1.0.0-beta4       coreclr x64          C:\Users\MySelf\.dnx\runtimes
       1.0.0-beta4       coreclr x86          C:\Users\MySelf\.dnx\runtimes
       1.0.0-beta5       clr     x86          C:\Users\Myself\.dnx\runtimes def
       1.0.0-beta5-12103 clr     x86          C:\Users\MySelf\.dnx\runtimes

2
你能分享一下 dnvm list 命令的输出吗? - agua from mars
1
尝试卸载 1.0.0-beta5-12103(只需删除文件夹),然后运行 dnvm use defaultdnu restore。你尝试的命令是在 beta4 下执行的,因为 * 表示。 - agua from mars
2个回答

8
我刚刚将一个Visual Studio 2015 ASP.MVC Web应用程序从beta4升级到beta5,现在已经运行。以下是您所遵循的指示的一些补充说明。

运行“dnvm upgrade”

完成后,dnvm list将输出以下内容。

Active Version           Runtime Architecture Location                       Alias
------ -------           ------- ------------ --------                       -----
       1.0.0-beta4       clr     x64          C:\Users\BigFont\.dnx\runtimes
       1.0.0-beta4       clr     x86          C:\Users\BigFont\.dnx\runtimes
       1.0.0-beta4       coreclr x64          C:\Users\BigFont\.dnx\runtimes
       1.0.0-beta4       coreclr x86          C:\Users\BigFont\.dnx\runtimes
  *    1.0.0-beta5       clr     x86          C:\Users\BigFont\.dnx\runtimes default
       1.0.0-beta5-12087 clr     x86          C:\Users\BigFont\.dnx\runtimes

在您的应用程序中更新global.json以指向beta5

global.json中指向beta5的特定版本:

{
    "projects": [ "src", "test" ],
    "sdk": {
        "version": "1.0.0-beta5"
    }
}

同样,你的project.json需要指向beta5版本的软件包

project.json中引用beta5。这将使dnu还原最新的构建(好吧,有点 - David Fowl在这里描述了“浮动版本”的细微差别。)。

"dependencies": {
  "Microsoft.AspNet.Server.IIS": "1.0.0-beta5",
  "Microsoft.AspNet.Server.WebListener": "1.0.0-beta5",
  "Microsoft.AspNet.StaticFiles": "1.0.0-beta5"
},

...根据需要将您的代码迁移到beta5

一旦您停止收到有关缺少基本对象(例如System.Void)的错误,您可能会收到有关破坏性更改的错误。这可能需要一些研究才能解决,具体取决于您的代码库使用了什么。例如,如果您正在使用ASP.NET Identity,则需要更改以下内容:

SignInManager.PasswordSignInAsync(
    model.Email, model.Password, model.RememberMe, shouldLockout: false);

翻译成中文为:

SignInManager.PasswordSignInAsync(
    model.Email, model.Password, model.RememberMe, lockoutOnFailure: false);

关于Visual Studio的最终说明

在更新global.jsonpackage.json文件后,关闭并重新打开Visual Studio中的解决方案可以解决还原/构建问题。

另请参阅:ASP.NET 5(vNext)Web项目:从beta4升级到beta6时出现库冲突


1
使用“beta5-*”而不是仅使用“beta5”就解决了问题。谢谢。 - Snæbjørn
1
那个 -* 的语法被称为“悬浮版本”。David Fowl在这里写了关于它的文章 http://davidfowl.com/diagnosing-dependency-issues-with-asp-net-5/。 - Shaun Luttin
2
1.0.0-beta5已经发布。这是beta5的最后一个版本,无需指定构建编号或浮动版本,这是没有意义的。 - davidfowl
2
没错!顺便说一下,当实际的 beta 版本发布时,你想要删除 -* 的原因是因为我们在部署到 NuGet.org 时会进行一些奇怪的操作,以便于安装官方版本。当我们发布到 nuget.org 时,我们会删除构建号。这意味着 1.0.0-beta5-{somebuild} > 1.0.0-beta5,虽然不太好,但这使得更容易找到正确的软件包版本。 - davidfowl
2
那并不是非常重要。它可以减少噪音,但在大多数情况下无害。 - davidfowl
显示剩余4条评论

1

@Shaun Luttin已经涉及了这个问题,但我想提到两件事情:

  • 浏览器链接在Beta 5中实际上不起作用。它会导致一个非常奇怪的错误。您需要注释掉app.UseBrowserlink()才能使事情正常工作。后续版本已经解决了这个问题。
  • 我还发现带有“ConfigurationModel”名称的包已被重命名为“Configuration”。

1
不仅仅是改名字,它们的使用方法也有一些变化 https://github.com/aspnet/Announcements/issues/25 - Kaelan Fouwels

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接