ASP.NET v5 без DNX

Я понимаю, что DNX предоставляет возможность вызывать различные новые функции управления пакетами приложений ASP.NET v5.

Однако возможно ли «создать» одно из этих приложений (используя DNX и т. д.) и «предварительно скомпилировать» их таким образом, чтобы их можно было развернуть (с помощью Octopus) и запустить на немодифицированном сервере IIS с использованием .NET framework 4.5?

У меня была возможность ориентироваться на .NET 4.5 при создании проекта, и хотя установка DNX на наш сервер сборки вряд ли будет проблемой, слишком рано выдвигать его на наши производственные веб-серверы.


person Neil Barnwell    schedule 19.06.2015    source источник
comment
Вы пробовали dnu build и/или dnu publish?   -  person Pawel    schedule 24.06.2015
comment
Да, и это работает - я отправил ответ. :)   -  person Neil Barnwell    schedule 24.06.2015


Ответы (2)


Я обнаружил, что это действительно возможно.

Я опубликовал свое приложение, выполнив следующую команду в том же каталоге, что и файл project.json:

dnu publish --runtime runtimeX --no-source

Где runtimeX — это подходящая установленная среда выполнения, найденная с помощью:

dnvm list

Здесь перечислены только установленные среды выполнения, поэтому необходимо следующее, чтобы получить полное имя для использования в качестве аргумента для dnu:

dnvm name default

Вы можете проверить аргументы для команды dnvm «name», но, по сути, вы указываете разрядность процессора и версию среды выполнения, и вы возвращаете правильно отформатированное имя.

Сделав это, возьмите содержимое bin\output и запустите его в IIS или IISExpress. Для меня это сработало как шарм, хотя я скопировал этот вывод на другую виртуальную машину для разработки, на которой еще не установлены инструменты VS2015/DNX.

person Neil Barnwell    schedule 24.06.2015
comment
Вы не используете asp.net 5 без DNX. Параметр dnu publish --runtime включает локальную копию версии DNX, указанной в папке публикации. Так что да, вы можете связать зависимость с приложением, но зависимость все еще существует. Если вы удалите папку среды выполнения из развернутого местоположения, приложение завершится ошибкой. - person Gerald Davis; 29.06.2015
comment
Это справедливое замечание. Думаю, на самом деле я имел в виду, что хотел развернуть на машине, на которой есть не что иное, как обычная установка ASP.NET до v5. - person Neil Barnwell; 02.07.2015

Нет. Вы сказали, что можете ориентироваться на .Net 4.5 в ASP.NET, но это не совсем точно, вы можете ориентироваться на dnx451, который представляет собой .Net Full Framework 4.5.1 + DNX.

DNX не «устанавливается» так же, как .Net Framework. На самом деле это не установка, а скорее xcopy. DNVM просто загружает определенную копию DNX и помещает ее в папку c:\Users\.dnx\runtimes. Если вы не хотите использовать dnx, вы можете просто скопировать папку. Когда приложение ссылается на определенную версию среды выполнения, оно просто вызывает dnx.exe в правильной папке по соглашению c:\Users\<User>\.dnx\runtimes\<dnx-runtimetype-os-architecture.version>\bin\dnx.exe

Если вы хотите даже избежать отдельного шага, параметр --runtime в dnu publish будет включать копию в структуру папок приложения /approot/runtimes, взяв копию с локальной машины разработчика. Ответ Нила содержит более подробную информацию. Это позволяет избежать необходимости установки dnx отдельно, но dnx по-прежнему используется. Использование --no-source не является необходимым и не зависит от решения по объединению среды выполнения с приложением.

Если вам интересно, как IIS «находит» dnx для начала выполнения, при публикации проекта проект включается в /wwwroot/bin/AspNetLoader.dll. Это обеспечивает точку входа для IIS. Также включен небольшой файл web.config, который указывает местоположение исполняемого файла dnx.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="bootstrapper-version" value="1.0.0-beta4" />
    <add key="runtime-path" value="..\approot\runtimes" />
    <add key="dnx-version" value="1.0.0-beta6-12120" />
    <add key="dnx-clr" value="coreclr" />
    <add key="dnx-app-base" value="..\approot\src\AspDotNetFiveDemo.Web" />
  </appSettings>
</configuration>

Эта «загрузка» на самом деле предназначена только для обеспечения обратной совместимости с IIS. Он не используется в другой среде. Например, при самостоятельном размещении с использованием http.sys DNX.exe просто вызывается напрямую и предоставляет сборки и параметры.

person Gerald Davis    schedule 29.06.2015