ANCM InProcess startup failed because of invalid runtimeconfig.json [duplicate]
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
This question already has an answer here:
Serilog does not write log to file while using InProcess hosting model in ASP.NET Core 2.2
2 answers
The application is deployed as an (32-bit, .NET Core 2.2) App Service on Azure. It works fine when using the standard AspNetCoreModule
instead of the newer AspNetCoreModuleV2
that supports the InProcess
hostingmodel.
When using the new InProcess
hostingmodel, the actual error is
Could not find inprocess request handler. Captured output from
invoking hostfxr: Invalid runtimeconfig.json
[D:homesitewwwrootFoo.Api.runtimeconfig.json]
[D:homesitewwwrootFoo.Api.runtimeconfig.dev.json]
Foo.Api.runtimeconfig.json at wwwroot location
{
"runtimeOptions": {
"tfm": "netcoreapp2.2",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "2.2.0"
},
"configProperties": {
"System.GC.Server": true
}
}
}
Web.config
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".Foo.Api.dll" stdoutLogEnabled="true" stdoutLogFile=".logsstdout" hostingModel="InProcess">
<handlerSettings>
<handlerSetting name="debugLevel" value="file" />
<handlerSetting name="debugFile" value=".logsancm.log" />
</handlerSettings>
</aspNetCore>
</system.webServer>
</location>
</configuration>
ANCM logfile
[aspnetcorev2.dll] Initializing logs for 'D:Program Files (x86)IISAsp.Net Core ModuleV2aspnetcorev2.dll'. Process Id: 12324.. File Version: 12.2.18296.0. Description: IIS ASP.NET Core Module V2. Commit: 61f1a70784dc0a32cf98f8ddd169c0293b0390ab.
[aspnetcorev2.dll] Detected app_offline file, creating polling application
[aspnetcorev2.dll] Application went offline
[aspnetcorev2.dll] Resolving hostfxr parameters for application: 'dotnet' arguments: '.Foo.Api.dll' path: 'D:homesitewwwroot'
[aspnetcorev2.dll] Known dotnet.exe location: ''
[aspnetcorev2.dll] Process path 'dotnet.exe' is dotnet, treating application as portable
[aspnetcorev2.dll] Resolving absolute path to dotnet.exe from 'dotnet.exe'
[aspnetcorev2.dll] Invoking where.exe to find dotnet.exe
[aspnetcorev2.dll] where.exe invocation returned: 'D:Program Files (x86)dotnetdotnet.exe
D:Program Filesdotnetdotnet.exe
'
[aspnetcorev2.dll] Current process bitness type detected as isX64=0
[aspnetcorev2.dll] Processing entry 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Binary type 0
[aspnetcorev2.dll] Found dotnet.exe via where.exe invocation at 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Resolving absolute path to hostfxr.dll from 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] hostfxr.dll located at 'D:Program Files (x86)dotnethostfxr2.2.0hostfxr.dll'
[aspnetcorev2.dll] Converted argument '.Foo.Api.dll' to 'D:homesitewwwroot.Foo.Api.dll'
[aspnetcorev2.dll] Parsed hostfxr options: dotnet location: 'D:Program Files (x86)dotnetdotnet.exe' hostfxr path: 'D:Program Files (x86)dotnethostfxr2.2.0hostfxr.dll' arguments:
[aspnetcorev2.dll] Argument[0] = 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Argument[1] = 'D:homesitewwwroot.Foo.Api.dll'
[aspnetcorev2.dll] Event Log: 'Invoking hostfxr to find the inprocess request handler failed without finding any native dependencies. This most likely means the app is misconfigured, please check the versions of Microsoft.NetCore.App and Microsoft.AspNetCore.App that are targeted by the application and are installed on the machine.'
End Event Log Message.
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcorehandlerresolver.cpp:80
[aspnetcorev2.dll] Event Log: 'Could not find inprocess request handler. Captured output from invoking hostfxr: Invalid runtimeconfig.json [D:homesitewwwrootFoo.Api.runtimeconfig.json] [D:homesitewwwrootFoo.Api.runtimeconfig.dev.json]
'
End Event Log Message.
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcorehandlerresolver.cpp:153
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcoreapplicationinfo.cpp:136
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcoreapplicationinfo.cpp:91
[aspnetcorev2.dll] Event Log: 'Failed to start application '/LM/W3SVC/1455123678/ROOT', ErrorCode '0x8000ffff'.'
End Event Log Message.
[aspnetcorev2.dll] ASPNET_CORE_GLOBAL_MODULE::OnGlobalStopListening
[aspnetcorev2.dll] Stopping application '/LM/W3SVC/1455123678/ROOT'
[aspnetcorev2.dll] ASPNET_CORE_GLOBAL_MODULE::Terminate
Server details using kudu
dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 2.2.100
Commit: 51868761f2
Runtime Environment:
OS Name: Windows
OS Version: 10.0.14393
OS Platform: Windows
RID: win10-x86
Base Path: D:Program Files (x86)dotnetsdk2.2.100
Host (useful for support):
Version: 2.2.0
Commit: 1249f08fed
.NET Core SDKs installed:
1.1.10 [D:Program Files (x86)dotnetsdk]
2.1.402 [D:Program Files (x86)dotnetsdk]
2.1.500 [D:Program Files (x86)dotnetsdk]
2.2.100 [D:Program Files (x86)dotnetsdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.NETCore.App 1.0.12 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 1.1.9 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.0.9 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Program.cs
using System;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using Foo.Dal;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
namespace Foo.Api
{
[ExcludeFromCodeCoverage]
public class Program
{
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
public static int Main(string args)
{
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(Configuration)
.WriteTo.Console()
.CreateLogger();
try
{
Log.Information("Starting web host");
CreateWebHostBuilder(args).Build().Migrate().Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseConfiguration(Configuration)
.UseSerilog();
}
public static class MigrationExtentions
{
public static IWebHost Migrate(this IWebHost webhost)
{
using (var scope = webhost.Services.GetService<IServiceScopeFactory>().CreateScope())
{
using (var dbContext = scope.ServiceProvider.GetRequiredService<MyContext>())
{
dbContext.Database.Migrate();
}
}
return webhost;
}
}
}
csproj excerpt
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<RuntimeFrameworkVersion>2.2.0</RuntimeFrameworkVersion>
<UserSecretsId>717ec1cf-5ff6-4176-b96b-ee427f40bee5</UserSecretsId>
<AssemblyName>Bar.Foo.Api</AssemblyName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
c# asp.net-core asp.net-core-2.2
marked as duplicate by Kirk Larkin, Community♦ Jan 3 at 12:25
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
add a comment |
This question already has an answer here:
Serilog does not write log to file while using InProcess hosting model in ASP.NET Core 2.2
2 answers
The application is deployed as an (32-bit, .NET Core 2.2) App Service on Azure. It works fine when using the standard AspNetCoreModule
instead of the newer AspNetCoreModuleV2
that supports the InProcess
hostingmodel.
When using the new InProcess
hostingmodel, the actual error is
Could not find inprocess request handler. Captured output from
invoking hostfxr: Invalid runtimeconfig.json
[D:homesitewwwrootFoo.Api.runtimeconfig.json]
[D:homesitewwwrootFoo.Api.runtimeconfig.dev.json]
Foo.Api.runtimeconfig.json at wwwroot location
{
"runtimeOptions": {
"tfm": "netcoreapp2.2",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "2.2.0"
},
"configProperties": {
"System.GC.Server": true
}
}
}
Web.config
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".Foo.Api.dll" stdoutLogEnabled="true" stdoutLogFile=".logsstdout" hostingModel="InProcess">
<handlerSettings>
<handlerSetting name="debugLevel" value="file" />
<handlerSetting name="debugFile" value=".logsancm.log" />
</handlerSettings>
</aspNetCore>
</system.webServer>
</location>
</configuration>
ANCM logfile
[aspnetcorev2.dll] Initializing logs for 'D:Program Files (x86)IISAsp.Net Core ModuleV2aspnetcorev2.dll'. Process Id: 12324.. File Version: 12.2.18296.0. Description: IIS ASP.NET Core Module V2. Commit: 61f1a70784dc0a32cf98f8ddd169c0293b0390ab.
[aspnetcorev2.dll] Detected app_offline file, creating polling application
[aspnetcorev2.dll] Application went offline
[aspnetcorev2.dll] Resolving hostfxr parameters for application: 'dotnet' arguments: '.Foo.Api.dll' path: 'D:homesitewwwroot'
[aspnetcorev2.dll] Known dotnet.exe location: ''
[aspnetcorev2.dll] Process path 'dotnet.exe' is dotnet, treating application as portable
[aspnetcorev2.dll] Resolving absolute path to dotnet.exe from 'dotnet.exe'
[aspnetcorev2.dll] Invoking where.exe to find dotnet.exe
[aspnetcorev2.dll] where.exe invocation returned: 'D:Program Files (x86)dotnetdotnet.exe
D:Program Filesdotnetdotnet.exe
'
[aspnetcorev2.dll] Current process bitness type detected as isX64=0
[aspnetcorev2.dll] Processing entry 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Binary type 0
[aspnetcorev2.dll] Found dotnet.exe via where.exe invocation at 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Resolving absolute path to hostfxr.dll from 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] hostfxr.dll located at 'D:Program Files (x86)dotnethostfxr2.2.0hostfxr.dll'
[aspnetcorev2.dll] Converted argument '.Foo.Api.dll' to 'D:homesitewwwroot.Foo.Api.dll'
[aspnetcorev2.dll] Parsed hostfxr options: dotnet location: 'D:Program Files (x86)dotnetdotnet.exe' hostfxr path: 'D:Program Files (x86)dotnethostfxr2.2.0hostfxr.dll' arguments:
[aspnetcorev2.dll] Argument[0] = 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Argument[1] = 'D:homesitewwwroot.Foo.Api.dll'
[aspnetcorev2.dll] Event Log: 'Invoking hostfxr to find the inprocess request handler failed without finding any native dependencies. This most likely means the app is misconfigured, please check the versions of Microsoft.NetCore.App and Microsoft.AspNetCore.App that are targeted by the application and are installed on the machine.'
End Event Log Message.
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcorehandlerresolver.cpp:80
[aspnetcorev2.dll] Event Log: 'Could not find inprocess request handler. Captured output from invoking hostfxr: Invalid runtimeconfig.json [D:homesitewwwrootFoo.Api.runtimeconfig.json] [D:homesitewwwrootFoo.Api.runtimeconfig.dev.json]
'
End Event Log Message.
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcorehandlerresolver.cpp:153
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcoreapplicationinfo.cpp:136
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcoreapplicationinfo.cpp:91
[aspnetcorev2.dll] Event Log: 'Failed to start application '/LM/W3SVC/1455123678/ROOT', ErrorCode '0x8000ffff'.'
End Event Log Message.
[aspnetcorev2.dll] ASPNET_CORE_GLOBAL_MODULE::OnGlobalStopListening
[aspnetcorev2.dll] Stopping application '/LM/W3SVC/1455123678/ROOT'
[aspnetcorev2.dll] ASPNET_CORE_GLOBAL_MODULE::Terminate
Server details using kudu
dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 2.2.100
Commit: 51868761f2
Runtime Environment:
OS Name: Windows
OS Version: 10.0.14393
OS Platform: Windows
RID: win10-x86
Base Path: D:Program Files (x86)dotnetsdk2.2.100
Host (useful for support):
Version: 2.2.0
Commit: 1249f08fed
.NET Core SDKs installed:
1.1.10 [D:Program Files (x86)dotnetsdk]
2.1.402 [D:Program Files (x86)dotnetsdk]
2.1.500 [D:Program Files (x86)dotnetsdk]
2.2.100 [D:Program Files (x86)dotnetsdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.NETCore.App 1.0.12 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 1.1.9 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.0.9 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Program.cs
using System;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using Foo.Dal;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
namespace Foo.Api
{
[ExcludeFromCodeCoverage]
public class Program
{
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
public static int Main(string args)
{
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(Configuration)
.WriteTo.Console()
.CreateLogger();
try
{
Log.Information("Starting web host");
CreateWebHostBuilder(args).Build().Migrate().Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseConfiguration(Configuration)
.UseSerilog();
}
public static class MigrationExtentions
{
public static IWebHost Migrate(this IWebHost webhost)
{
using (var scope = webhost.Services.GetService<IServiceScopeFactory>().CreateScope())
{
using (var dbContext = scope.ServiceProvider.GetRequiredService<MyContext>())
{
dbContext.Database.Migrate();
}
}
return webhost;
}
}
}
csproj excerpt
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<RuntimeFrameworkVersion>2.2.0</RuntimeFrameworkVersion>
<UserSecretsId>717ec1cf-5ff6-4176-b96b-ee427f40bee5</UserSecretsId>
<AssemblyName>Bar.Foo.Api</AssemblyName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
c# asp.net-core asp.net-core-2.2
marked as duplicate by Kirk Larkin, Community♦ Jan 3 at 12:25
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
1
Using the workaround in the duplicate question worked.
– emp
Jan 3 at 12:27
add a comment |
This question already has an answer here:
Serilog does not write log to file while using InProcess hosting model in ASP.NET Core 2.2
2 answers
The application is deployed as an (32-bit, .NET Core 2.2) App Service on Azure. It works fine when using the standard AspNetCoreModule
instead of the newer AspNetCoreModuleV2
that supports the InProcess
hostingmodel.
When using the new InProcess
hostingmodel, the actual error is
Could not find inprocess request handler. Captured output from
invoking hostfxr: Invalid runtimeconfig.json
[D:homesitewwwrootFoo.Api.runtimeconfig.json]
[D:homesitewwwrootFoo.Api.runtimeconfig.dev.json]
Foo.Api.runtimeconfig.json at wwwroot location
{
"runtimeOptions": {
"tfm": "netcoreapp2.2",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "2.2.0"
},
"configProperties": {
"System.GC.Server": true
}
}
}
Web.config
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".Foo.Api.dll" stdoutLogEnabled="true" stdoutLogFile=".logsstdout" hostingModel="InProcess">
<handlerSettings>
<handlerSetting name="debugLevel" value="file" />
<handlerSetting name="debugFile" value=".logsancm.log" />
</handlerSettings>
</aspNetCore>
</system.webServer>
</location>
</configuration>
ANCM logfile
[aspnetcorev2.dll] Initializing logs for 'D:Program Files (x86)IISAsp.Net Core ModuleV2aspnetcorev2.dll'. Process Id: 12324.. File Version: 12.2.18296.0. Description: IIS ASP.NET Core Module V2. Commit: 61f1a70784dc0a32cf98f8ddd169c0293b0390ab.
[aspnetcorev2.dll] Detected app_offline file, creating polling application
[aspnetcorev2.dll] Application went offline
[aspnetcorev2.dll] Resolving hostfxr parameters for application: 'dotnet' arguments: '.Foo.Api.dll' path: 'D:homesitewwwroot'
[aspnetcorev2.dll] Known dotnet.exe location: ''
[aspnetcorev2.dll] Process path 'dotnet.exe' is dotnet, treating application as portable
[aspnetcorev2.dll] Resolving absolute path to dotnet.exe from 'dotnet.exe'
[aspnetcorev2.dll] Invoking where.exe to find dotnet.exe
[aspnetcorev2.dll] where.exe invocation returned: 'D:Program Files (x86)dotnetdotnet.exe
D:Program Filesdotnetdotnet.exe
'
[aspnetcorev2.dll] Current process bitness type detected as isX64=0
[aspnetcorev2.dll] Processing entry 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Binary type 0
[aspnetcorev2.dll] Found dotnet.exe via where.exe invocation at 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Resolving absolute path to hostfxr.dll from 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] hostfxr.dll located at 'D:Program Files (x86)dotnethostfxr2.2.0hostfxr.dll'
[aspnetcorev2.dll] Converted argument '.Foo.Api.dll' to 'D:homesitewwwroot.Foo.Api.dll'
[aspnetcorev2.dll] Parsed hostfxr options: dotnet location: 'D:Program Files (x86)dotnetdotnet.exe' hostfxr path: 'D:Program Files (x86)dotnethostfxr2.2.0hostfxr.dll' arguments:
[aspnetcorev2.dll] Argument[0] = 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Argument[1] = 'D:homesitewwwroot.Foo.Api.dll'
[aspnetcorev2.dll] Event Log: 'Invoking hostfxr to find the inprocess request handler failed without finding any native dependencies. This most likely means the app is misconfigured, please check the versions of Microsoft.NetCore.App and Microsoft.AspNetCore.App that are targeted by the application and are installed on the machine.'
End Event Log Message.
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcorehandlerresolver.cpp:80
[aspnetcorev2.dll] Event Log: 'Could not find inprocess request handler. Captured output from invoking hostfxr: Invalid runtimeconfig.json [D:homesitewwwrootFoo.Api.runtimeconfig.json] [D:homesitewwwrootFoo.Api.runtimeconfig.dev.json]
'
End Event Log Message.
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcorehandlerresolver.cpp:153
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcoreapplicationinfo.cpp:136
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcoreapplicationinfo.cpp:91
[aspnetcorev2.dll] Event Log: 'Failed to start application '/LM/W3SVC/1455123678/ROOT', ErrorCode '0x8000ffff'.'
End Event Log Message.
[aspnetcorev2.dll] ASPNET_CORE_GLOBAL_MODULE::OnGlobalStopListening
[aspnetcorev2.dll] Stopping application '/LM/W3SVC/1455123678/ROOT'
[aspnetcorev2.dll] ASPNET_CORE_GLOBAL_MODULE::Terminate
Server details using kudu
dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 2.2.100
Commit: 51868761f2
Runtime Environment:
OS Name: Windows
OS Version: 10.0.14393
OS Platform: Windows
RID: win10-x86
Base Path: D:Program Files (x86)dotnetsdk2.2.100
Host (useful for support):
Version: 2.2.0
Commit: 1249f08fed
.NET Core SDKs installed:
1.1.10 [D:Program Files (x86)dotnetsdk]
2.1.402 [D:Program Files (x86)dotnetsdk]
2.1.500 [D:Program Files (x86)dotnetsdk]
2.2.100 [D:Program Files (x86)dotnetsdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.NETCore.App 1.0.12 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 1.1.9 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.0.9 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Program.cs
using System;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using Foo.Dal;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
namespace Foo.Api
{
[ExcludeFromCodeCoverage]
public class Program
{
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
public static int Main(string args)
{
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(Configuration)
.WriteTo.Console()
.CreateLogger();
try
{
Log.Information("Starting web host");
CreateWebHostBuilder(args).Build().Migrate().Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseConfiguration(Configuration)
.UseSerilog();
}
public static class MigrationExtentions
{
public static IWebHost Migrate(this IWebHost webhost)
{
using (var scope = webhost.Services.GetService<IServiceScopeFactory>().CreateScope())
{
using (var dbContext = scope.ServiceProvider.GetRequiredService<MyContext>())
{
dbContext.Database.Migrate();
}
}
return webhost;
}
}
}
csproj excerpt
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<RuntimeFrameworkVersion>2.2.0</RuntimeFrameworkVersion>
<UserSecretsId>717ec1cf-5ff6-4176-b96b-ee427f40bee5</UserSecretsId>
<AssemblyName>Bar.Foo.Api</AssemblyName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
c# asp.net-core asp.net-core-2.2
This question already has an answer here:
Serilog does not write log to file while using InProcess hosting model in ASP.NET Core 2.2
2 answers
The application is deployed as an (32-bit, .NET Core 2.2) App Service on Azure. It works fine when using the standard AspNetCoreModule
instead of the newer AspNetCoreModuleV2
that supports the InProcess
hostingmodel.
When using the new InProcess
hostingmodel, the actual error is
Could not find inprocess request handler. Captured output from
invoking hostfxr: Invalid runtimeconfig.json
[D:homesitewwwrootFoo.Api.runtimeconfig.json]
[D:homesitewwwrootFoo.Api.runtimeconfig.dev.json]
Foo.Api.runtimeconfig.json at wwwroot location
{
"runtimeOptions": {
"tfm": "netcoreapp2.2",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "2.2.0"
},
"configProperties": {
"System.GC.Server": true
}
}
}
Web.config
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".Foo.Api.dll" stdoutLogEnabled="true" stdoutLogFile=".logsstdout" hostingModel="InProcess">
<handlerSettings>
<handlerSetting name="debugLevel" value="file" />
<handlerSetting name="debugFile" value=".logsancm.log" />
</handlerSettings>
</aspNetCore>
</system.webServer>
</location>
</configuration>
ANCM logfile
[aspnetcorev2.dll] Initializing logs for 'D:Program Files (x86)IISAsp.Net Core ModuleV2aspnetcorev2.dll'. Process Id: 12324.. File Version: 12.2.18296.0. Description: IIS ASP.NET Core Module V2. Commit: 61f1a70784dc0a32cf98f8ddd169c0293b0390ab.
[aspnetcorev2.dll] Detected app_offline file, creating polling application
[aspnetcorev2.dll] Application went offline
[aspnetcorev2.dll] Resolving hostfxr parameters for application: 'dotnet' arguments: '.Foo.Api.dll' path: 'D:homesitewwwroot'
[aspnetcorev2.dll] Known dotnet.exe location: ''
[aspnetcorev2.dll] Process path 'dotnet.exe' is dotnet, treating application as portable
[aspnetcorev2.dll] Resolving absolute path to dotnet.exe from 'dotnet.exe'
[aspnetcorev2.dll] Invoking where.exe to find dotnet.exe
[aspnetcorev2.dll] where.exe invocation returned: 'D:Program Files (x86)dotnetdotnet.exe
D:Program Filesdotnetdotnet.exe
'
[aspnetcorev2.dll] Current process bitness type detected as isX64=0
[aspnetcorev2.dll] Processing entry 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Binary type 0
[aspnetcorev2.dll] Found dotnet.exe via where.exe invocation at 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Resolving absolute path to hostfxr.dll from 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] hostfxr.dll located at 'D:Program Files (x86)dotnethostfxr2.2.0hostfxr.dll'
[aspnetcorev2.dll] Converted argument '.Foo.Api.dll' to 'D:homesitewwwroot.Foo.Api.dll'
[aspnetcorev2.dll] Parsed hostfxr options: dotnet location: 'D:Program Files (x86)dotnetdotnet.exe' hostfxr path: 'D:Program Files (x86)dotnethostfxr2.2.0hostfxr.dll' arguments:
[aspnetcorev2.dll] Argument[0] = 'D:Program Files (x86)dotnetdotnet.exe'
[aspnetcorev2.dll] Argument[1] = 'D:homesitewwwroot.Foo.Api.dll'
[aspnetcorev2.dll] Event Log: 'Invoking hostfxr to find the inprocess request handler failed without finding any native dependencies. This most likely means the app is misconfigured, please check the versions of Microsoft.NetCore.App and Microsoft.AspNetCore.App that are targeted by the application and are installed on the machine.'
End Event Log Message.
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcorehandlerresolver.cpp:80
[aspnetcorev2.dll] Event Log: 'Could not find inprocess request handler. Captured output from invoking hostfxr: Invalid runtimeconfig.json [D:homesitewwwrootFoo.Api.runtimeconfig.json] [D:homesitewwwrootFoo.Api.runtimeconfig.dev.json]
'
End Event Log Message.
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcorehandlerresolver.cpp:153
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcoreapplicationinfo.cpp:136
[aspnetcorev2.dll] Failed HRESULT returned: 0x8000ffff at c:bwe37dd45d8cd1eaf4modulesiisintegrationsrcaspnetcoremodulev2aspnetcoreapplicationinfo.cpp:91
[aspnetcorev2.dll] Event Log: 'Failed to start application '/LM/W3SVC/1455123678/ROOT', ErrorCode '0x8000ffff'.'
End Event Log Message.
[aspnetcorev2.dll] ASPNET_CORE_GLOBAL_MODULE::OnGlobalStopListening
[aspnetcorev2.dll] Stopping application '/LM/W3SVC/1455123678/ROOT'
[aspnetcorev2.dll] ASPNET_CORE_GLOBAL_MODULE::Terminate
Server details using kudu
dotnet --info
.NET Core SDK (reflecting any global.json):
Version: 2.2.100
Commit: 51868761f2
Runtime Environment:
OS Name: Windows
OS Version: 10.0.14393
OS Platform: Windows
RID: win10-x86
Base Path: D:Program Files (x86)dotnetsdk2.2.100
Host (useful for support):
Version: 2.2.0
Commit: 1249f08fed
.NET Core SDKs installed:
1.1.10 [D:Program Files (x86)dotnetsdk]
2.1.402 [D:Program Files (x86)dotnetsdk]
2.1.500 [D:Program Files (x86)dotnetsdk]
2.2.100 [D:Program Files (x86)dotnetsdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.All 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.All 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.All]
Microsoft.AspNetCore.App 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.AspNetCore.App 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.AspNetCore.App]
Microsoft.NETCore.App 1.0.12 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 1.1.9 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.0.9 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.1.4 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.1.6 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Microsoft.NETCore.App 2.2.0 [D:Program Files (x86)dotnetsharedMicrosoft.NETCore.App]
Program.cs
using System;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using Foo.Dal;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Serilog;
namespace Foo.Api
{
[ExcludeFromCodeCoverage]
public class Program
{
public static IConfiguration Configuration { get; } = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
public static int Main(string args)
{
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(Configuration)
.WriteTo.Console()
.CreateLogger();
try
{
Log.Information("Starting web host");
CreateWebHostBuilder(args).Build().Migrate().Run();
return 0;
}
catch (Exception ex)
{
Log.Fatal(ex, "Host terminated unexpectedly");
return 1;
}
finally
{
Log.CloseAndFlush();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseConfiguration(Configuration)
.UseSerilog();
}
public static class MigrationExtentions
{
public static IWebHost Migrate(this IWebHost webhost)
{
using (var scope = webhost.Services.GetService<IServiceScopeFactory>().CreateScope())
{
using (var dbContext = scope.ServiceProvider.GetRequiredService<MyContext>())
{
dbContext.Database.Migrate();
}
}
return webhost;
}
}
}
csproj excerpt
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<RuntimeFrameworkVersion>2.2.0</RuntimeFrameworkVersion>
<UserSecretsId>717ec1cf-5ff6-4176-b96b-ee427f40bee5</UserSecretsId>
<AssemblyName>Bar.Foo.Api</AssemblyName>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
This question already has an answer here:
Serilog does not write log to file while using InProcess hosting model in ASP.NET Core 2.2
2 answers
c# asp.net-core asp.net-core-2.2
c# asp.net-core asp.net-core-2.2
edited Jan 3 at 12:03
Kirk Larkin
23.4k74467
23.4k74467
asked Jan 3 at 10:45


empemp
3,0142037
3,0142037
marked as duplicate by Kirk Larkin, Community♦ Jan 3 at 12:25
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
marked as duplicate by Kirk Larkin, Community♦ Jan 3 at 12:25
This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.
1
Using the workaround in the duplicate question worked.
– emp
Jan 3 at 12:27
add a comment |
1
Using the workaround in the duplicate question worked.
– emp
Jan 3 at 12:27
1
1
Using the workaround in the duplicate question worked.
– emp
Jan 3 at 12:27
Using the workaround in the duplicate question worked.
– emp
Jan 3 at 12:27
add a comment |
1 Answer
1
active
oldest
votes
Directory.GetCurrentDirectory()
doesn't work in InProcess
hosting model in ASP.NET Core 2.2. This is bug which I have reported in Github.
Alternative solution is to write a helper class called CurrentDirectoryHelpers
as follows:
internal class CurrentDirectoryHelpers
{
internal const string AspNetCoreModuleDll = "aspnetcorev2_inprocess.dll";
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern IntPtr GetModuleHandle(string lpModuleName);
[System.Runtime.InteropServices.DllImport(AspNetCoreModuleDll)]
private static extern int http_get_application_properties(ref IISConfigurationData iiConfigData);
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
private struct IISConfigurationData
{
public IntPtr pNativeApplication;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
public string pwzFullApplicationPath;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
public string pwzVirtualApplicationPath;
public bool fWindowsAuthEnabled;
public bool fBasicAuthEnabled;
public bool fAnonymousAuthEnable;
}
public static void SetCurrentDirectory()
{
try
{
// Check if physical path was provided by ANCM
var sitePhysicalPath = Environment.GetEnvironmentVariable("ASPNETCORE_IIS_PHYSICAL_PATH");
if (string.IsNullOrEmpty(sitePhysicalPath))
{
// Skip if not running ANCM InProcess
if (GetModuleHandle(AspNetCoreModuleDll) == IntPtr.Zero)
{
return;
}
IISConfigurationData configurationData = default(IISConfigurationData);
if (http_get_application_properties(ref configurationData) != 0)
{
return;
}
sitePhysicalPath = configurationData.pwzFullApplicationPath;
}
Environment.CurrentDirectory = sitePhysicalPath;
}
catch
{
// ignore
}
}
}
Then call the SetCurrentDirectory()
of the CurrentDirectoryHelpers
class as follows:
public class Program
{
public static void Main(string args)
{
CurrentDirectoryHelpers.SetCurrentDirectory();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(Configuration)
.WriteTo.Console()
.CreateLogger();
...
}
}
Now everything should work fine!
I'd never have found this! Thank you!
– Daniel Edwards
Feb 7 at 14:44
add a comment |
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Directory.GetCurrentDirectory()
doesn't work in InProcess
hosting model in ASP.NET Core 2.2. This is bug which I have reported in Github.
Alternative solution is to write a helper class called CurrentDirectoryHelpers
as follows:
internal class CurrentDirectoryHelpers
{
internal const string AspNetCoreModuleDll = "aspnetcorev2_inprocess.dll";
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern IntPtr GetModuleHandle(string lpModuleName);
[System.Runtime.InteropServices.DllImport(AspNetCoreModuleDll)]
private static extern int http_get_application_properties(ref IISConfigurationData iiConfigData);
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
private struct IISConfigurationData
{
public IntPtr pNativeApplication;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
public string pwzFullApplicationPath;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
public string pwzVirtualApplicationPath;
public bool fWindowsAuthEnabled;
public bool fBasicAuthEnabled;
public bool fAnonymousAuthEnable;
}
public static void SetCurrentDirectory()
{
try
{
// Check if physical path was provided by ANCM
var sitePhysicalPath = Environment.GetEnvironmentVariable("ASPNETCORE_IIS_PHYSICAL_PATH");
if (string.IsNullOrEmpty(sitePhysicalPath))
{
// Skip if not running ANCM InProcess
if (GetModuleHandle(AspNetCoreModuleDll) == IntPtr.Zero)
{
return;
}
IISConfigurationData configurationData = default(IISConfigurationData);
if (http_get_application_properties(ref configurationData) != 0)
{
return;
}
sitePhysicalPath = configurationData.pwzFullApplicationPath;
}
Environment.CurrentDirectory = sitePhysicalPath;
}
catch
{
// ignore
}
}
}
Then call the SetCurrentDirectory()
of the CurrentDirectoryHelpers
class as follows:
public class Program
{
public static void Main(string args)
{
CurrentDirectoryHelpers.SetCurrentDirectory();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(Configuration)
.WriteTo.Console()
.CreateLogger();
...
}
}
Now everything should work fine!
I'd never have found this! Thank you!
– Daniel Edwards
Feb 7 at 14:44
add a comment |
Directory.GetCurrentDirectory()
doesn't work in InProcess
hosting model in ASP.NET Core 2.2. This is bug which I have reported in Github.
Alternative solution is to write a helper class called CurrentDirectoryHelpers
as follows:
internal class CurrentDirectoryHelpers
{
internal const string AspNetCoreModuleDll = "aspnetcorev2_inprocess.dll";
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern IntPtr GetModuleHandle(string lpModuleName);
[System.Runtime.InteropServices.DllImport(AspNetCoreModuleDll)]
private static extern int http_get_application_properties(ref IISConfigurationData iiConfigData);
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
private struct IISConfigurationData
{
public IntPtr pNativeApplication;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
public string pwzFullApplicationPath;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
public string pwzVirtualApplicationPath;
public bool fWindowsAuthEnabled;
public bool fBasicAuthEnabled;
public bool fAnonymousAuthEnable;
}
public static void SetCurrentDirectory()
{
try
{
// Check if physical path was provided by ANCM
var sitePhysicalPath = Environment.GetEnvironmentVariable("ASPNETCORE_IIS_PHYSICAL_PATH");
if (string.IsNullOrEmpty(sitePhysicalPath))
{
// Skip if not running ANCM InProcess
if (GetModuleHandle(AspNetCoreModuleDll) == IntPtr.Zero)
{
return;
}
IISConfigurationData configurationData = default(IISConfigurationData);
if (http_get_application_properties(ref configurationData) != 0)
{
return;
}
sitePhysicalPath = configurationData.pwzFullApplicationPath;
}
Environment.CurrentDirectory = sitePhysicalPath;
}
catch
{
// ignore
}
}
}
Then call the SetCurrentDirectory()
of the CurrentDirectoryHelpers
class as follows:
public class Program
{
public static void Main(string args)
{
CurrentDirectoryHelpers.SetCurrentDirectory();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(Configuration)
.WriteTo.Console()
.CreateLogger();
...
}
}
Now everything should work fine!
I'd never have found this! Thank you!
– Daniel Edwards
Feb 7 at 14:44
add a comment |
Directory.GetCurrentDirectory()
doesn't work in InProcess
hosting model in ASP.NET Core 2.2. This is bug which I have reported in Github.
Alternative solution is to write a helper class called CurrentDirectoryHelpers
as follows:
internal class CurrentDirectoryHelpers
{
internal const string AspNetCoreModuleDll = "aspnetcorev2_inprocess.dll";
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern IntPtr GetModuleHandle(string lpModuleName);
[System.Runtime.InteropServices.DllImport(AspNetCoreModuleDll)]
private static extern int http_get_application_properties(ref IISConfigurationData iiConfigData);
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
private struct IISConfigurationData
{
public IntPtr pNativeApplication;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
public string pwzFullApplicationPath;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
public string pwzVirtualApplicationPath;
public bool fWindowsAuthEnabled;
public bool fBasicAuthEnabled;
public bool fAnonymousAuthEnable;
}
public static void SetCurrentDirectory()
{
try
{
// Check if physical path was provided by ANCM
var sitePhysicalPath = Environment.GetEnvironmentVariable("ASPNETCORE_IIS_PHYSICAL_PATH");
if (string.IsNullOrEmpty(sitePhysicalPath))
{
// Skip if not running ANCM InProcess
if (GetModuleHandle(AspNetCoreModuleDll) == IntPtr.Zero)
{
return;
}
IISConfigurationData configurationData = default(IISConfigurationData);
if (http_get_application_properties(ref configurationData) != 0)
{
return;
}
sitePhysicalPath = configurationData.pwzFullApplicationPath;
}
Environment.CurrentDirectory = sitePhysicalPath;
}
catch
{
// ignore
}
}
}
Then call the SetCurrentDirectory()
of the CurrentDirectoryHelpers
class as follows:
public class Program
{
public static void Main(string args)
{
CurrentDirectoryHelpers.SetCurrentDirectory();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(Configuration)
.WriteTo.Console()
.CreateLogger();
...
}
}
Now everything should work fine!
Directory.GetCurrentDirectory()
doesn't work in InProcess
hosting model in ASP.NET Core 2.2. This is bug which I have reported in Github.
Alternative solution is to write a helper class called CurrentDirectoryHelpers
as follows:
internal class CurrentDirectoryHelpers
{
internal const string AspNetCoreModuleDll = "aspnetcorev2_inprocess.dll";
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern IntPtr GetModuleHandle(string lpModuleName);
[System.Runtime.InteropServices.DllImport(AspNetCoreModuleDll)]
private static extern int http_get_application_properties(ref IISConfigurationData iiConfigData);
[System.Runtime.InteropServices.StructLayout(System.Runtime.InteropServices.LayoutKind.Sequential)]
private struct IISConfigurationData
{
public IntPtr pNativeApplication;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
public string pwzFullApplicationPath;
[System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.BStr)]
public string pwzVirtualApplicationPath;
public bool fWindowsAuthEnabled;
public bool fBasicAuthEnabled;
public bool fAnonymousAuthEnable;
}
public static void SetCurrentDirectory()
{
try
{
// Check if physical path was provided by ANCM
var sitePhysicalPath = Environment.GetEnvironmentVariable("ASPNETCORE_IIS_PHYSICAL_PATH");
if (string.IsNullOrEmpty(sitePhysicalPath))
{
// Skip if not running ANCM InProcess
if (GetModuleHandle(AspNetCoreModuleDll) == IntPtr.Zero)
{
return;
}
IISConfigurationData configurationData = default(IISConfigurationData);
if (http_get_application_properties(ref configurationData) != 0)
{
return;
}
sitePhysicalPath = configurationData.pwzFullApplicationPath;
}
Environment.CurrentDirectory = sitePhysicalPath;
}
catch
{
// ignore
}
}
}
Then call the SetCurrentDirectory()
of the CurrentDirectoryHelpers
class as follows:
public class Program
{
public static void Main(string args)
{
CurrentDirectoryHelpers.SetCurrentDirectory();
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.ReadFrom.Configuration(Configuration)
.WriteTo.Console()
.CreateLogger();
...
}
}
Now everything should work fine!
answered Jan 3 at 11:58


TanvirArjelTanvirArjel
10.2k32148
10.2k32148
I'd never have found this! Thank you!
– Daniel Edwards
Feb 7 at 14:44
add a comment |
I'd never have found this! Thank you!
– Daniel Edwards
Feb 7 at 14:44
I'd never have found this! Thank you!
– Daniel Edwards
Feb 7 at 14:44
I'd never have found this! Thank you!
– Daniel Edwards
Feb 7 at 14:44
add a comment |
1
Using the workaround in the duplicate question worked.
– emp
Jan 3 at 12:27