Подтвердить что ты не робот

ASP.Net Core 1.0 RC2: Что такое LAUNCHER_PATH и LAUNCHER_ARGS, упомянутые в web.config?

В выпуске ASP.NET 5 RC2 есть нарушение изменений:

  • Он переименован в ASP.NET Core 1.0 (ASP.NET 5 мертв)
  • До свидания dnvm и dnu командной строки они заменяются на dotnet
  • Различные необходимые изменения кода

Я пытаюсь развернуть файлы, созданные dotnet publish. Структура файлов отличается от RC1. Я вижу следующую ошибку в средстве просмотра событий:

Failed to start process with commandline '%LAUNCHER_PATH% %LAUNCHER_ARGS%', Error Code = '0x80070002'.

Эти переменные среды упоминаются в web.config, которые взяты из официального документа официального rc1-to-rc2.

<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*"
              modules="AspNetCoreModule" resourceType="Unspecified"/>
    </handlers>
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%"
        stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"
        forwardWindowsAuthToken="false"/>
  </system.webServer>
</configuration>

Каковы правильные значения для %LAUNCHER_PATH% и %LAUNCHER_ARGS%? Эти значения не упоминаются в документе github publish.

4b9b3361

Ответ 1

Из github IISSample (спасибо @Pawel и Luke), вот значения возможностей:

<!-- This set of attributes are used for launching the sample using IISExpress via Visual Studio tooling -->
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>

<!-- This set of attributes are used for launching the sample for full CLR (net451) without Visual Studio tooling -->
<aspNetCore processPath=".\IISSample.exe" arguments="" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>

<!-- This set of attributes are used for launching the sample for Core CLR (netcoreapp1.0) without Visual Studio tooling -->
<aspNetCore processPath="dotnet" arguments=".\IISSample.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>

После нескольких часов работы с ними я обнаружил, что есть два web.configs, с которыми нам нужно иметь дело: src\ProjectName\wwwroot\web.config и src\ProjectName\web.config. Если у вас нет последнего, публикация VS2015 будет генерировать один для вас с %LAUNCHER_PATH% и %LAUNCHER_ARGS% по умолчанию.

Чтобы проект запускался и отлаживался локально в VS2015 через IISExpress, для web.config необходимо иметь значение по умолчанию ниже. Замена LAUNCHER_PATH и LAUNCHER_ARGS на что-то еще приводит к тому, что VS2015 вешает бесконечно.

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>

Однако при развертывании в IIS (я использую 8.5 на WinServer 2012 R2) значение на src\ProjectName\web.config должно быть заменено следующим. Если сконфигурировано, команда dotnet publish-iis должна выполнить замену для вас (см. Ниже).

<aspNetCore processPath="dotnet" arguments=".\ProjectName.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>

Если вы переходите из RC1, измените связанный с http каталог, а также в корневую папку Project, а не wwwroot. Пример: от C:\inetpub\ProjectName\wwwroot до C:\inetpub\ProjectName.

Чтобы настроить publish-iis для автоматической замены, добавьте этот фрагмент в свой проект. json: (Спасибо @Pawel)

  "tools": {
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": {
      "version": "1.0.0-preview1-final"
    }
  },
  "scripts": {
    "postpublish": "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%"
  }

Сегмент инструмента IISIntegration преобразует эти параметры Launcher в соответствующие значения развертывания. Без него вы получите следующую ошибку:

No executable found matching command "dotnet-publish-iis"

Я использую RC2 Toolkit Preview 1.

Ответ 2

%LAUNCHER_PATH% и %LAUNCHER_ARGS% используются VS. инструмент publish-iis (если настроен) переопределяет их при публикации вашего приложения.

Ответ 3

Это часть web.config в VS:

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%"
    stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout"
    forwardWindowsAuthToken="false"/>

И это на сервере после публикации:

<aspNetCore processPath="dotnet" arguments=".\AppName.dll" 
    stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" 
    forwardWindowsAuthToken="false" />

В этом примере %LAUNCHER_PATH% был заменен на dotnet и %LAUNCHER_ARGS% на application name с расширением .dll

Ответ 4

Спасибо за помощь, ребята, я использовал шаблон (https://github.com/MarkPieszak/aspnetcore-angular2-universal) и команду

dotnet publish

создал папку под

bin/Debug/netcoreapp1.1/publish

Настройка этого пути в качестве корневого каталога сайта заставила его работать!