我们正在通过ASP.NET 5进行身份验证。In this security sample,我们看到了这种类型的东西:

app.Run(async context =>
{
    var types = context.Authentication.GetAuthenticationSchemes();
}
最初的问题
但是,在我们的项目中,HttpContext没有Authentication属性,我们将收到以下错误:

Microsoft.Framework.Runtime.Roslyn.RoslynCompilationException:C:\ myApp \ Startup.cs(71,46):错误CS1061:
'HttpContext'不包含'Authentication'的定义,找不到可以接受类型为'HttpContext'的第一个参数的扩展方法'Authentication'(您是否缺少using指令或程序集引用?)

因此,我们查看了源代码,发现其为here inside the HttpAbstractions assembly。因此,我们将该程序集添加到了项目中。
后续问题
不幸的是,我们现在收到以下错误:

Microsoft.Framework.Runtime.Roslyn.RoslynCompilationException:C:\ myApp \ Startup.cs(43,31):错误CS0433:
类型'IApplicationBuilder'在'Microsoft.AspNet.Http.Abstractions,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'和'Microsoft.AspNet.Http,Version = 1.0.0.0,Culture = neutral,PublicKeyToken中都存在= null'


很公平。我们如何要求编译器对此特定类型使用一个程序集而不使用另一个程序集?我们已经尝试删除.dnx\packages\Microsoft.AspNet.Http,但它只是在dnu restore之后返回。

最佳答案

正如ASP.NET团队所说的那样,您可能已经“跨越了流”。确保您是following the breaking changes,并且不包括来自多个beta版本的软件包(例如,确保您没有同时引用beta4beta5-最简单的检查方法是在project.lock.json中搜索它们。)最常见的事故来自使用.Interfaces软件包,因为大多数事故已被重命名为.Abstractions,但是还进行了其他程序集命名更改(以及删除操作!)。

更新:

当您无法通过已配置的服务器以及正在运行的dnvm版本访问NuGet软件包时,也会出现此错误。 (最近对dnvm进行了更新,为了使用最新的软件包,我必须对其进行升级;似乎即使在一个beta版本中,流仍然可以交叉!)若要使VS2015使用特定的dnvm,可以使用global.json需要:

{
    "projects": [ "src", "tests" ],
    "sdk": {
        "version": "1.0.0-beta6-12005"
    }
}

10-02 01:21
查看更多