Ответ 1
Чтобы опубликовать Core CLR, вы можете передать параметр msbuild 'PublishDNXVersion' как dnx-coreclr-win-x64.1.0.0-beta6.
msbuild <project>.xproj /p:deployOnBuild=true;PublishDNXVersion=dnx-coreclr-win-x64.1.0.0-beta6
Я пытаюсь настроить 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. Это работает, но выглядит как хак, поэтому я оставляю вопрос открытым для лучшего ответа.
Чтобы опубликовать Core CLR, вы можете передать параметр msbuild 'PublishDNXVersion' как dnx-coreclr-win-x64.1.0.0-beta6.
msbuild <project>.xproj /p:deployOnBuild=true;PublishDNXVersion=dnx-coreclr-win-x64.1.0.0-beta6
От портала "Старый лазурь" в разделе "Веб-приложение" его на странице "Панель мониторинга" вашего конкретного веб-приложения. [глубокий вдох]
С правой стороны находится раздел, в котором говорится, что "настроить публикацию с помощью визуальной студии онлайн". Нажав на эту ссылку, вы пройдете необходимые шаги, чтобы настроить непрерывное развертывание из онлайн-хранилища визуальной студии (либо на основе git, либо на основе tfs)
Так как это глоток, я предоставил ссылку на учебник, в котором вы просматриваете весь процесс: https://azure.microsoft.com/en-us/documentation/articles/cloud-services-continuous-delivery-use-vso/#step3
Была та же проблема с инструментами .NET Core RC2-preview1. Мое решение: добавьте SDKToolingDirectory
в мой .xproj с правильным путем установки .NET Core:
<PropertyGroup>
<VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">14.0</VisualStudioVersion>
<VSToolsPath Condition="'$(VSToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VSToolsPath>
<SDKToolingDirectory>C:\Program Files\dotnet</SDKToolingDirectory>
</PropertyGroup>
Мне повезло с этим, передав следующие параметры на этап Bundling моего процесса сборки Visual Studio Online:
/p:Bundle64BitRuntime=true /p:BundleCoreClrRuntime=true
Это приводит к тому, что моя публикация использует 64-битную рабочую среду CoreCLR, когда она запускается через msbuild.exe.
Я понял этот материал, пробив файл Microsoft.DNX.Publishing.targets(найденный в C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web) и ищет переменные, которые я мог бы перейти как свойства. Что касается времени выполнения, это, по-видимому, интересный фрагмент:
<GetRuntimeVersion
Condition="'$(IgnoreDNXRuntime)' != 'true'"
RuntimeVersionOverride="$(PublishDNXVersion)"
TargetDNXVersion="$(_DefaultDNXVersion)"
RuntimeToolingVersion="$(RuntimeToolingVersion)"
Want64Bit="$(Bundle64BitRuntime)"
WantCoreClr="$(BundleCoreClrRuntime)">
<Output PropertyName="FinalPublishVersion" TaskParameter="RuntimeVersion"></Output>
</GetRuntimeVersion>
Вероятно, здесь существует немного (?) риска с точки зрения будущей проверки вашей строковой процедуры против будущих изменений имен переменных. Но, вы знаете, бета-версия программного обеспечения и все такое:)
Удачи!