I managed to publish my application from VSO to Windows Azure. The problem now is that my application fail to start on Azure with this error (it works perfectly locally) :
System.TypeInitializationException: The type initializer for 'Microsoft.AspNetCore.Server.Kestrel.Networking.PlatformApis' threw an exception. ---> System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.InteropServices.RuntimeInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
at Microsoft.AspNetCore.Server.Kestrel.Networking.PlatformApis..cctor()
--- End of inner exception stack trace ---
at Microsoft.AspNetCore.Server.Kestrel.Networking.PlatformApis.get_IsWindows()
at Microsoft.AspNetCore.Server.Kestrel.Networking.Libuv..ctor()
at Microsoft.AspNetCore.Server.Kestrel.KestrelServer.Start[TContext](IHttpApplication`1 application)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.Start()
at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host, CancellationToken token, String shutdownMessage)
at Microsoft.AspNetCore.Hosting.WebHostExtensions.Run(IWebHost host)
at MyApp.Web.Startup.Main(String[] args)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Dnx.Runtime.Common.EntryPointExecutor.Execute(Assembly assembly, String[] args, IServiceProvider serviceProvider)
at Microsoft.Dnx.ApplicationHost.Program.<>c__DisplayClass3_0.<ExecuteMain>b__0()
at System.Threading.Tasks.Task`1.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime.InteropServices.RuntimeInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
File name: 'System.Runtime.InteropServices.RuntimeInformation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
at Microsoft.AspNetCore.Server.Kestrel.Networking.PlatformApis..cctor()
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure logging.
To turn this feature off, remove the registry value [HKLM\Software\Microsoft\Fusion!EnableLog].
I tried to add the dependency manually but it didn't solve the problem :
"System.Runtime.InteropServices.RuntimeInformation": "4.0.0-rc2-23826"
Here is my config
global.json:
{
"projects": [ "src", "test", "lib" ],
"sdk": {
"version": "1.0.0-rc2-20221",
"runtime": "clr",
"architecture": "x86"
}
}
project.json
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"Jil": "2.13.0",
"JWT": "1.3.4",
"Microsoft.AspNetCore.Authentication": "1.0.0-rc2-20270",
"Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-20270",
"Microsoft.AspNetCore.Hosting": "1.0.0-rc2-20270",
"Microsoft.AspNetCore.Http.Abstractions": "1.0.0-rc2-20270",
"Microsoft.AspNetCore.IISPlatformHandler": "1.0.0-rc2-20270",
"Microsoft.AspNetCore.Mvc.Core": "1.0.0-rc2-20270",
"Microsoft.AspNetCore.Mvc.ViewFeatures": "1.0.0-rc2-20270",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-20270",
"Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-20270",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-20270",
"Microsoft.Extensions.DependencyInjection": "1.0.0-rc2-20270",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc2-20270",
"Microsoft.Extensions.PlatformAbstractions.Dnx": "1.0.0-rc2-20221",
"System.Runtime.InteropServices.RuntimeInformation": "4.0.0-rc2-23826"
},
"frameworks": {
"net46": { }
}
Azure uses IIS under the covers. If the app works in IIS, it will usually work in an Azure Web App. The official docs have clear instructions for publishing to IIS. Once it works in IIS, deploy the same stuff to Azure.
Here are the exact publish steps that work for me. I made a sample that uses the project.json from your question and pushed the sample to GitHub.
Clone the sample:
C:\> git clone https://github.com/bigfont/StackOverflow.git
C:\> cd .\StackOverflow\RuntimeInfo
Then publish the project:
C:\StackOverflow\RuntimeInfo> dnvm use 1.0.0-rc2-20221 -runtime clr
C:\StackOverflow\RuntimeInfo> dotnet restore
C:\StackOverflow\RuntimeInfo> dotnet publish -c Release -o ./approot
Those commands target the RC2 runtime, restore the NuGet packages, and publish a release configuration to the approot directory. This is the result:
C:\StackOverflow\RuntimeInfo> dir
approot
bin
obj
Program.cs
project.json
project.lock.json
wwwroot
Now, using FTP, publish the approot
and wwwroot
directories to Azure's site
directory.
./site
approot
wwwroot
This is the result in Azure.
Be careful "crossing the streams." Your app has two release versions in its project.json/global.json files: 1.0.0-rc2-20221 and 1.0.0-rc2-20270. It is probably better to choose one.