Я использую Visual Studio 2015 CTP 6 в Windows 8.1.
Я пытаюсь написать веб-API с помощью ASP.NET v5 с новым форматом файла проекта. Я добавил ссылку на Noda Time v1.3.0 в мой файл project.json
, и редактор в Visual Studio подберет ее, но процесс сборки завершился неудачно.
Репро рецепт, прямо с нуля:
- Открыть VS 2015 CTP 6
- Создать новый проект в новом решении:
- Выберите шаблон проекта ASP.NET Web Application
- Выберите "ASP.NET 5 Preview Web API" в диалоговом окне шаблона
- Создайте проект, чтобы убедиться, что все правильно.
-
Откройте
project.json
, а в разделе "зависимостей" (добавьте дополнительную строку) добавьте дополнительную строку в начало (чтобы не добавлять запятую в другую строку):"NodaTime": "1.3.0",
- Открыть
Controllers\ValuesController.cs
-
Измените метод без параметров
Get()
, чтобы тело было:return DateTimeZoneProviders.Tzdb.Ids;
-
DateTimeZoneProviders
будет иметь красные squiggles, что разумно - у нас еще нет директивыusing
.
-
- Поместите курсор в
DateTimeZoneProviders
и нажмите Ctrl + . - вам будет предложено "using NodaTime;
" в качестве потенциального исправления... поэтому Intellisense (и, следовательно, Roslyn) определенно знает об этой зависимости. - Принять исправление. Уклоны уйдут - все хорошо, правильно?
- Попробуйте построить решение: вы должны получить две ошибки, в основном указывая, что зависимость не была разрешена.
В проводнике, если вы посмотрите в каталоге решений BugDemo
, вы найдете каталог artifacts\obj\BugDemo\Debug\ProjectRawReferences
, содержащий каталоги ASP.NET Core 5.0 и "ASP.NET 5.0", оба из которых имеют много DLL в... но не Noda Time.
Щелчок правой кнопкой мыши по проекту и выбор "Восстановить пакеты" не исправляет это.
Когда я создаю один и тот же проект с использованием Project K, kpm restore
забирает Noda Time, и если вы добавите раздел в project.json
, как показано ниже, то k web
работает и посещает http://localhost:5001/api/values покажет вам все идентификаторы часовых поясов TZDB:
"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001"
},
Итак, что я делаю неправильно? Или это просто ошибка?