Я пытаюсь настроить Visual Studio Online на постоянное развертывание моего приложения ASPNET 5 на веб-приложение Azure, как описано в этом уроке из документов Team Foundation Build: https://msdn.microsoft.com/Library/vs/alm/Build/azure/deploy-aspnet5
Я следил за всеми шагами, и все работает отлично. По умолчанию этот script развертывает сборку моего приложения, которое нацелено на полный .Net 4.5.1 DNX, поэтому я решил попробовать его модифицировать для развертывания .Net Core.
Конструкция script создает свой пакет развертывания, вызывая: msbuild.exe /t:Build,FileSystemPublish
После поворота многословия журнала и чтения через соответствующие файлы msbuild я узнал следующее:
Цель "Build" в конечном итоге использует dnx.exe для компиляции проекта. Поскольку файл project.json включает в себя как dnx451, так и coreclr TFM, этот шаг дает результат сборки для обеих фреймворков - пока это так хорошо.
Однако для цели FileSystemPublish, как представляется, выводится только пакет msdeploy, предназначенный для среды выполнения .NET 4.5.1. Из журналов я мог видеть, что выполнение цели FileSystemPublish в конечном итоге выдает команду "dnu publish", и в моих случаях передача "dnx-clr-win-x86.1.0.0-beta6" в качестве параметра -runtime. Когда я последовал за панировочными сухарями, чтобы узнать, откуда он получил значение "dnx-clr-win-x86.1.0.0-beta6", я в конечном итоге оказался в задаче "GetRuntimeToolingPath" в Microsoft.DNX.Tasks.dll. Эта задача, похоже, выглядит в global.json, чтобы определить правильное время выполнения для использования, но, как ни странно, внутренне переопределяет это значение с помощью "x86" и "clr" перед созданием строки возврата.
Если я правильно интерпретировал вещи, кажется, что цель FileSystemPublish (в Microsoft.DNX.Publishing.targets) по существу (косвенно) жестко связана с использованием x86, полной. DN инфраструктуры DNX при ее выпуске пакета. На этом этапе я зациклился на том, как получить этот процесс сборки для создания пакета .Net Core.
Мой вопрос заключается в том, почему FileSystemPublish будет связан с полным DNX файлом x86, и, учитывая, что это так (если я не ошибаюсь), что является рекомендуемым способом создания пакета msdeploy для приложения ASPNET 5, которое предназначено. Сетевое ядро?
EDIT:
Пока у меня есть обходное решение. Я могу передать /p:RuntimeToolingDirectory="C:\Users\buildguest\.dnx\runtimes\dnx-coreclr-win-x64.1.0.0-beta6"
в качестве параметра для msbuild.
Это переопределяет логику по умолчанию в GetRuntimeToolPath и заставляет ее использовать .Net Core. Это работает, но выглядит как хак, поэтому я оставляю вопрос открытым для лучшего ответа.