2015-06-11 2 views
3

Мы путаем через делать проверку подлинности в ASP.NET 5. In this security sample, мы видим, этот тип вещи:IApplicationBuilder существует в обоих Microsoft.AspNet.Http.Abstractions и Microsoft.AspNet.Http

app.Run(async context => 
{  
    var types = context.Authentication.GetAuthenticationSchemes(); 
} 

Initial Проблема

В нашем проекте, однако 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.

ответ

3

Возможно, вы, вероятно, «пересекли потоки», как говорят команды ASP.NET. Убедитесь, что вы - following the breaking changes, и не включаете пакеты из нескольких версий beta (убедитесь, что у вас нет как beta4, так и beta5 ссылок, например - самый простой способ проверить - поиск для вашего проекта.lock.json для них.) Наиболее распространенные несчастные случаи связаны с использованием пакетов .Interfaces, так как большинство из них были переименованы в .Abstractions, но были и другие изменения именования сборки (и удаления тоже!).

Update:

Эта ошибка также может прийти, когда вы не можете достичь пакетов NuGet с помощью серверов, которые вы настроили и для dnvm версии вы работаете. (Недавно было обновлено до dnvm, которое мне пришлось обновить, чтобы использовать последние пакеты, кажется, что даже в пределах одного бета-номера потоки все равно могут пересекаться!) Чтобы получить VS2015 для использования определенного dnvm, global.json может быть требуется:

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

Это мой текущий проект.json.lock: https://github.com/bigfont/mylocal-farm/blob/auth/myLocalFarm/src/farmApi/project.lock.json –

+0

Я не уверен, как убедитесь, что у нас нет ссылок на «бета4» и «бета5». Мы попытались удалить все ссылки на 'beta4' из нашего project.json, и мы продолжаем испытывать ту же проблему. –

+0

Когда вы говорите: «Убедитесь, что у вас нет ссылок« beta4 »и« бета5 », на какие зависимости вы ссылаетесь? То есть, версии бета-версии и' beta5', какие пакеты? Я не уверен какие пакеты нам нужно проверить, чтобы убедиться, что мы не пересекаем потоки. –

1

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 запись является Default Unstable, что мы видим, когда мы бежим dnvm.

+0

Похоже, я в другом часовом поясе, чем вы или я вернемся к вашим вопросам - рад, что вы это разработали! project.lock.json показывает дерево зависимостей, поэтому вы могли бы искать 'beta4' и находить то, что было в зависимости от него. Но это не забавный формат, который просто просматривается.) –

Смежные вопросы