从ASP.NET 5 Beta 4升级到Beta 5时出现错误

11

我按照这里的步骤,将ASP.NET 5 Beta 4升级到Beta 5,但在调用application.UseBrowserLink();时运行时出现错误:

类型“System.TypeLoadException”的异常发生于 mscorlib.dll 中,但未在用户代码中进行处理。

详细信息:无法从程序集‘Microsoft.AspNet.Http, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null’中加载类型‘Microsoft.AspNet.Builder.IApplicationBuilder’。

这是我遵循的步骤:

  1. 已安装VS 2015 RC。
  2. 从PowerShell运行:$env:DNX_FEED="https://www.nuget.org/api/v2"
  3. 从PowerShell运行:dnvm upgrade
  4. 添加了一个Global.json文件(我之前没有),当我添加它时,它已经引用了Beta 5:

    {
        "projects": [ "Source", "Tests" ],
        "sdk": {
            "version": "1.0.0-beta5-12103"
        }
    }
    
  5. 将project.json中的所有包更新为Beta 5。您可以在此处查看我的project.lock.json文件的完整版本。

  6. {
      "dependencies": {
        "Boilerplate.Web.Mvc6": "1.0.2",
        "Microsoft.AspNet.Diagnostics": "1.0.0-beta5",
        "Microsoft.AspNet.Mvc": "6.0.0-beta5",
        "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta5",
        "Microsoft.AspNet.Mvc.Xml": "6.0.0-beta5",
        "Microsoft.AspNet.Server.IIS": "1.0.0-beta5",
        "Microsoft.AspNet.Server.WebListener": "1.0.0-beta5",
        "Microsoft.AspNet.StaticFiles": "1.0.0-beta5",
        "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta5",
        "Microsoft.Framework.CodeGenerators.Mvc": "1.0.0-beta5",
        "Microsoft.Framework.Configuration.EnvironmentVariables": "1.0.0-beta5",
        "Microsoft.Framework.Configuration.Json": "1.0.0-beta5",
        "Microsoft.Framework.Configuration.UserSecrets": "1.0.0-beta5",
        "Microsoft.Framework.Logging": "1.0.0-beta5",
        "Microsoft.Framework.Logging.Console": "1.0.0-beta5",
        "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta5",
        "Newtonsoft.Json": "6.0.6",
        "System.Runtime": "4.0.20-beta-23019"
      }
      "frameworks": {
          "dnx451": {
            "frameworkAssemblies": {
              "System.Net.Http": "4.0.0.0",
              "System.ServiceModel": "4.0.0.0"
            }
          },
          "dnxcore50": {
            "dependencies": {
              "System.Net.Http": "4.0.0-beta-23019"
            }
          }
        }
    }
    
  7. 接下来的指令说你应该运行以下命令,但我认为VS 2015 RC会替你执行这些命令:dnu restorednu build

更新

看起来是浏览器链接的问题,将该行注释掉可以使网站正常工作。它可能已经损坏了?需要在aspnet GitHub问题中搜索。


相关 https://github.com/aspnet/Home/issues/719 - Muhammad Rehan Saeed
1
稳定的 NuGet 源中最新的 dnx 运行时版本是 1.0.0-beta5,但是你在 global.json 中引用了夜间构建版本 1.0.0-beta5-12103。也许更改 SDK 版本为 1.0.0-beta5 会有所帮助。 - Henk Mollema
6个回答

21
为了帮助您从beta4迁移到beta5,以下是基于研究/发现所采取的步骤。

环境

  • 运行PowerShell:$env:DNX_FEED="https://www.nuget.org/api/v2"
  • 运行PowerShell:dnvm install 1.0.0-beta5
  • 运行PowerShell:dnvm use 1.0.0-beta5 -p不确定是否需要,但我必须这样做

项目

  • 打开global.json并将sdk更新为1.0.0-beta5,应该像这样:

    {
        "projects": [ "src", "test" ],
        "sdk": {
            "version": "1.0.0-beta5"
        }
    }
    
  • 打开 project.json 文件:

    • 将依赖项版本从 beta4 更新到 beta5
    • Configuration 依赖项更改为:

      "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta4"
      

      "Microsoft.Framework.Configuration": "1.0.0-beta5",
      "Microsoft.Framework.Configuration.Json": "1.0.0-beta5"
      
    • 删除Microsoft.VisualStudio.Web.BrowserLink.Loader
    • _GlobalImport.cshtml重命名为_ViewImports.cshtml

Startup.cs更改

  • 更改Configuration的破坏性更改

    • 将namespace从using Microsoft.Framework.ConfigurationModel;更改为using Microsoft.Framework.Configuration;

    • Configuration.GetSubKey更改为Configuration.GetConfigurationSection

    • 更改CTOR为:

      public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
      {           
          // Setup configuration sources.
          var configBuilder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
          .AddJsonFile("config.json")
          .AddEnvironmentVariables();
      
          Configuration = configBuilder.Build();
      }
      
    • 移除 app.UseBrowserLink();

项目 DNU CMDs

  • 应用程序根目录打开 PowerShell
  • 运行 dnu restore
  • 运行 dnu build
  • 在这点上关闭并重新打开 VS 有时会有帮助。

我自己发现升级现有项目相当困难,无法找到所有必要的步骤并将它们放在一起。 希望它能有所帮助!


如果您能更新您的经验至 beta 6,将会不胜感激。 - hlyates
非常好的信息和研究,谢谢。 微软在VS2015方面严重失误了...而且很遗憾,在他们Win-7之后的所有事情上都失误了 :( - nathanchere

5
为了升级从beta 4到beta 6,请参考Stephen Lautier的回答,对于从beta 5到beta 6的升级,你需要做以下步骤:
1. 打开global.json并更新sdk至"1.0.0-beta6",保存该文件
2. Visual Studio 2015会提示下载beta6,点击Yes
3. 在project.json中:
- 将dnx451(或dnx452)改为dnx46(使用Framework 4.6) - 将所有"-beta5"替换为"-beta6" - 移除Microsoft.Framework.ConfigurationModel.UserSecrets
4. 如果你使用Session,在Startup.cs中:
  • replace app.UseInMemorySession(...) with app.UseSession()
  • In ConfigureServices, add this :

     services.AddCaching();
     services.AddSession();
     services.ConfigureSession(o => {    o.IdleTimeout = TimeSpan.FromSeconds(10); });
    
  • Right click on your Project > Properties > Debug > Add a new Environment Variable :

名称 : DNX_IIS_RUNTIME_FRAMEWORK

值 : dnx46

更多信息请参见 : http://jameschambers.com/2015/07/launching-an-asp-net-5-application-from-visual-studio-2015/

  • 在程序包管理器控制台中,输入"dnu restore"和"dnu build"
  • 重新启动Visual Studio

在此之后,我的项目可以在beta6中运行,可能还有其他需要做的事情。


你为什么移除了Microsoft.Framework.ConfigurationModel.UserSecrets? - Muhammad Rehan Saeed

2

和 ASP.NET vNext 团队的 @davidfowl 交流后,他告诉我浏览器链接在 beta5 中无法使用,应该删除。


2
我们正在调查此事。 - davidfowl
当你在VS2015 RTM中选择文件->新建项目时,它会引用Browser Link。 - Radenko Zec

1
如果有人想知道如何升级到ASP.NET 5 Beta 7,我发现下载Visual Studio 2015的最新ASP.NET和Web工具更新,然后在Visual Studio中创建一个新的ASP.NET 5项目很有用。
这将为您创建一个具有Beta 7项目结构、代码和引用依赖项的项目。您可以使用此作为指南来升级任何现有的旧版Beta项目。
例如,在使用所有Beta 7依赖项的情况下,我的project.json看起来像这样:
{
  "webroot": "wwwroot",
  "userSecretsId": "aspnet5-WebApplication1-a433a0ef-3bed-4bc9-8086-8d18070fa2c1",
  "version": "1.0.0-*",

  "dependencies": {
    "EntityFramework.Commands": "7.0.0-beta7",
    "EntityFramework.SqlServer": "7.0.0-beta7",
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-beta7",
    "Microsoft.AspNet.Authentication.Facebook": "1.0.0-beta7",
    "Microsoft.AspNet.Authentication.Google": "1.0.0-beta7",
    "Microsoft.AspNet.Authentication.MicrosoftAccount": "1.0.0-beta7",
    "Microsoft.AspNet.Authentication.Twitter": "1.0.0-beta7",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta7",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta7",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta7",
    "Microsoft.AspNet.Mvc": "6.0.0-beta7",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta7",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta7",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta7",
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta7",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta7",
    "Microsoft.Framework.Configuration.Abstractions": "1.0.0-beta7",
    "Microsoft.Framework.Configuration.Json": "1.0.0-beta7",
    "Microsoft.Framework.Configuration.UserSecrets": "1.0.0-beta7",
    "Microsoft.Framework.Logging": "1.0.0-beta7",
    "Microsoft.Framework.Logging.Console": "1.0.0-beta7",
    "Microsoft.Framework.Logging.Debug" : "1.0.0-beta7",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta7"
  },

  "commands": {
    "web": "Microsoft.AspNet.Hosting --config hosting.ini",
    "ef": "EntityFramework.Commands"
  },

  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  },

  "exclude": [
    "wwwroot",
    "node_modules",
    "bower_components"
  ],
  "publishExclude": [
    "node_modules",
    "bower_components",
    "**.xproj",
    "**.user",
    "**.vspscc"
  ],
  "scripts": {
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ]
  }
}

目前,您可以在此处下载Visual Studio的Beta 7更新。请确保获取WebToolsExtensionsVS14.msi文件。

有关此Beta 7版本的更多信息,请查看博客文章宣布ASP.NET 5 Beta7的可用性


1

我已经尝试添加了两个,但仍然不起作用。出现相同的错误。 - Muhammad Rehan Saeed

1
这是事情的内容:
您将DNX从beta4更新到beta5,并且想在Visual Studio RC中运行一个MVC6模板(该模板是围绕beta4构建的)。
首先,在beta5中,"Microsoft.Framework.Configuration.Json"不再存在。(您一定要看看这个:https://github.com/aspnet/announcements/issues?q=milestone%3A1.0.0-beta5 - 从beta4到beta5的重大变更)。
为了确认您的DNX已经正确更新,请构建一个新的空Web项目并简单地添加MVC/WebAPI(检查其是否正常工作的简单情况)。
我还没有尝试运行MVC模板,但我会尝试并回来告诉您。

是的,你说得对。 :) 你成功运行模板了吗? - radu-matei
顺便说一下,你应该尝试不带身份验证的MVC6模板,因为EF已经发生了一些变化:https://github.com/aspnet/Announcements/issues/35 - radu-matei
不使用EF。在注释掉浏览器链接行后,模板可以正常运行。 - Muhammad Rehan Saeed
2
如果你想尝试新的beta5版本,可以安装Yeoman,它提供了基本的Web应用程序模板,包括MVC模板(包括EF)。 - radu-matei
1
你可以做的最好的事情就是安装Node(如果你还没有安装),然后安装Yeoman for asp.net 5,这样你就可以创建功能性的beta 5模板(MVC Web App,Web App without authentication等)。到目前为止我在GitHub上还没有找到它们。 - radu-matei
显示剩余3条评论

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