There are breaking changes in ASP.NET 5 RC2 release:
- It is rebranded to ASP.NET Core 1.0 (ASP.NET 5 is dead)
- Good bye
dnvmanddnucommand line, they are replaced bydotnet - Various necessary code changes
I am trying to deploy the files generated by dotnet publish. The files structure is different from RC1. I see the following error in the Event Viewer:
Failed to start process with commandline '%LAUNCHER_PATH% %LAUNCHER_ARGS%', Error Code = '0x80070002'.
These environment variables are mentioned in web.config, which is taken from the official rc1-to-rc2 document.
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*"
modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%"
stdoutLogEnabled="false" stdoutLogFile=".logsstdout"
forwardWindowsAuthToken="false"/>
</system.webServer>
</configuration>
What are the correct values for %LAUNCHER_PATH% and %LAUNCHER_ARGS% ? These values are not mentioned in their github publish document.
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
From github IISSample (thank you @Pawel and Luke), here are the value possibilities:
<!-- 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=".logsstdout" 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=".logsstdout" 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=".logsstdout" forwardWindowsAuthToken="false"/>
After several hours dealing with them, I found there are two web.configs that we need to deal with: srcProjectNamewwwrootweb.config and srcProjectNameweb.config . If you dont have the latter, VS2015 publish will generate one for you with %LAUNCHER_PATH% and %LAUNCHER_ARGS% by default.
To have the project run and debuggable locally under VS2015 via IISExpress, both web.config need to have the default value below. Replacing LAUNCHER_PATH and LAUNCHER_ARGS to something else causes VS2015 to hang indefinitely.
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" forwardWindowsAuthToken="false"/>
However, upon deploying to IIS (I am using 8.5 on WinServer 2012 R2), the value on srcProjectNameweb.config must be replaced with the following. If configured, the dotnet publish-iis command suppose to do the replacement for you (see below).
<aspNetCore processPath="dotnet" arguments=".ProjectName.dll" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" forwardWindowsAuthToken="false"/>
If you are migrating from RC1, change the http bound directory as well to Project root folder, not wwwroot. Example: from C:inetpubProjectNamewwwroot to C:inetpubProjectName.
To configure publish-iis to do automatic replacement, add this snippet to your project.json: (Thank you @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%"
}
The IISIntegration tool segment converts these Launcher variables to the appropriate deployment values. Without it, you will get the following error:
No executable found matching command "dotnet-publish-iis"
I am using RC2 Toolkit Preview 1.
Method 2
The %LAUNCHER_PATH% and %LAUNCHER_ARGS% are used by VS. publish-iis tool (if configured) will override them when you publish your application.
Method 3
This is part of web.config in VS:
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%"
stdoutLogEnabled="false" stdoutLogFile=".logsstdout"
forwardWindowsAuthToken="false"/>
And this is on the server after publishing:
<aspNetCore processPath="dotnet" arguments=".AppName.dll"
stdoutLogEnabled="false" stdoutLogFile=".logsstdout"
forwardWindowsAuthToken="false" />
In this example %LAUNCHER_PATH% was replaced by dotnet, and %LAUNCHER_ARGS% by application name with .dll extension
Method 4
Thanks for the help guys, I was using a template (https://github.com/MarkPieszak/aspnetcore-angular2-universal) and the command
dotnet publish
made a folder under
bin/Debug/netcoreapp1.1/publish
Setting this path as the root directory of the site made it work!
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0