Microsoft.AspNet.Http.Abstractions 和 Microsoft.AspNet.Http 中都存在 IApplicationBuilder

IApplicationBuilder exists in both Microsoft.AspNet.Http.Abstractions and Microsoft.AspNet.Http

我们正在 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): error CS1061:

'HttpContext' does not contain a definition for 'Authentication' and no extension method 'Authentication' accepting a first argument of type 'HttpContext' could be found (are you missing a using directive or an assembly reference?)

所以,我们查看了源代码,发现它 here inside the HttpAbstractions assembly。因此,我们将该程序集添加到我们的项目中。

后续问题

不幸的是,我们现在收到以下错误:

Microsoft.Framework.Runtime.Roslyn.RoslynCompilationException: C:\myApp\Startup.cs(43,31): error CS0433:

The type 'IApplicationBuilder' exists in both 'Microsoft.AspNet.Http.Abstractions, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' and 'Microsoft.AspNet.Http, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'

问题

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

之后恢复

您可能 "crossed the streams",正如 ASP.NET 团队所说。确保你是 following the breaking changes 并且不包括来自多个 beta 版本的包(确保你没有同时引用 beta4beta5,例如 - 最简单检查的方法是在 project.lock.json 中搜索它们。)最常见的事故来自使用 .Interfaces 包,因为其中大部分已重命名为 .Abstractions,但还有其他程序集命名更改(还有删除!)。

更新:

当您无法通过您配置的服务器访问 NuGet 包并且对于 dnvm 版本您是 运行 时,也会出现此错误。 (最近 dnvm 有一个更新,我必须升级才能使用最新的软件包;似乎即使在单个测试版中,流仍然可以交叉!)让 VS2015 使用特定的 dnvm,可能需要 global.json

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

Matt DeKrey 是对的。我不需要过河。简而言之,我需要 beta6 并且在 beta4 上。以下是修复步骤:

1 变化 project.json

现在看起来像这样

  "dependencies": {
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta6",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta6",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta6",
    "Microsoft.AspNet.Mvc": "6.0.0-beta6",
    "EntityFramework.SqlServer": "7.0.0-beta6",
    "EntityFramework.InMemory": "7.0.0-beta6",
    "Microsoft.AspNet.Identity": "3.0.0-beta6"
  }

2 添加一个Nuget.config

重要的是,我需要将 Nuget.config 文件添加到我的存储库的根目录,因为 beta6 尚未在 NuGet 中。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/api/v2" />
    <add key="NuGet" value="https://nuget.org/api/v2/" />
  </packageSources>
</configuration>

AspNetVNext条目就是我们在运行dnvm时看到的Default Unstable