Я создал API, используя. net Core 3.1, и, как эти вещи, он работает на моей машине. Но он также не работает на моей машине, когда я пытаюсь опубликовать sh в IIS. Я должен использовать IIS как одно из моих требований. Итак, ошибки:
- Ошибка HTTP 500.30 - Ошибка запуска процесса ANCM. Я перепробовал кучу вещей, но ничего не получалось. Я просмотрел файлы appsettings, чтобы посмотреть, пропустил ли я запятую или что-то в этом роде, и изменил настройки в IIS, чтобы пул приложений не управлял кодом, и отключил параметр 32-разрядного приложения.
- Необработанное исключение. System.IO.FileNotFoundException: не удалось найти файл 'C: \ inetpub \ wwwroot \ appnamehere \ appsettings .. json'. Я нашел это в средстве просмотра событий.
Ошибки средства просмотра событий следующие:
Приложение '/ LM / W3SVC / 2 / ROOT' с физическим root 'C: \ inetpub \ wwwroot \ appnamehere \' не удалось загрузить coreclr. Сообщение об исключении: рабочий поток CLR преждевременно завершен
Приложение '/ LM / W3SVC / 2 / ROOT' с физическим root 'C: \ inetpub \ wwwroot \ appnamehere \', неожиданно управляемое попадание исключение, код исключения = '0xe0434352'. Первые 30 КБ символов захваченных журналов stdout и stderr: необработанное исключение. System.IO.FileNotFoundException: не удалось найти файл 'C: \ inetpub \ wwwroot \ appnamehere \ appsettings .. json'. Имя файла: 'C: \ inetpub \ wwwroot \ appnamehere \ appsettings .. json' в System.IO.FileStream.ValidateFileHandle (SafeFileHandle fileHandle) в System.IO.FileStream.CreateFileOpenHandle (режим FileMode, общий доступ к файлам) , Параметры FileOptions) в System.IO.FileStream..ctor (Строковый путь, Режим FileMode, Доступ к FileAccess, Общий ресурс FileShare, Int32 bufferSize, Параметры FileOptions) в System.IO.StreamReader.ValidateArgsAndOpenPath (Путь строки, Кодировка, Int32 bufferSize) в System.IO.StreamReader..ctor (строковый путь, кодировка кодирования, логическое определениеEnecodingFromByteOrderMarks) в System.IO.File.InternalReadAllText (строковый путь, кодировка кодирования) в System.IO.File.ReadAllText (строковый путь) в appnamehere.Svices .Configurations.DatabaseConfigProvider.FetchConfiguration () в C: \ Development \ solutionNameHere \ appnamehere.Services.Configurations \ DatabaseConfigProvider.cs: строка 25 в appnamehere.Services.Configurations.DatabaseConfigProvider.Load () в \ 1045 *: solutionNameHere \ appnameher e.Services.Configurations \ DatabaseConfigProvider.cs: строка 20 в Microsoft.Extensions.Configuration.Configuration Root .. ctor (средство доступа IList 1 providers)
at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
at appnamehere.Services.Configurations.AppConfiguration.GetCurrentSettings() in C:\Development\solutionNameHere\appnamehere.Services.Configurations\AppConfiguration.cs:line 34
at appnamehere.Services.Configurations.AppConfiguration.get_Current() in C:\Development\solutionNameHere\appnamehere.Services.Configurations\AppConfiguration.cs:line 24
at appnamehere.Services.Data.Implementation.TitanDbContext.OnConfiguring(DbContextOptionsBuilder optionsBuilder) in C:\Development\solutionNameHere\appnamehere.Services.Data.Implementation\TitanDbContext.cs:line 17
at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider()
at Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>.get_Instance()
at Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>.get_Instance()
at Microsoft.EntityFrameworkCore.Internal.InternalAccessorExtensions.GetService[TService](IInfrastructure
1) в Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService [TService] (IInfrastructure` 1 средство доступа) в Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.get_DatabaseCreator () в Microsoft.EntityFrameworkCore.Infrastructure.DatabaseFacade.EnsureCreated () в appnamehere.Startup..ctor (конфигурация IConfiguration) в C: \ Development \ имя_приложения \ имя_узла Startup.cs: строка 27 --- Конец трассировки стека из предыдущего местоположения, где было сгенерировано исключение --- в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.ConstructorMatcher.CreateInstance (поставщик IServiceProvider) в Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateInstance ( Поставщик IServiceProvider, тип instanceType, параметры Object [] в Microsoft.AspNetCore.Hosting.GenericWebHostBuilder.UseStartup (тип startupType, HostBuilderCon текстовый контекст, IServiceCollection services) в Microsoft.AspNetCore.Hosting.GenericWebHostBuilder. <> c__DisplayClass12_0.b__0 (контекст HostBuilderContext, IServiceCollection services) в Microsoft.Extensions.HostBuild.HostBuilder.CreateHence (H). ) в appnamehere.Program.Main (String [] args) в C: \ Development \ solutionNameHere \ appnamehere \ Program.cs: строка 20
Итак, я пошел в это место и там все мои файлы appsettings были как appsettings. json, так и appsettings.Development. json. Затем я пошел посмотреть, где произошла ошибка.
public class Program
{
public static void Main(string[] args)
{
try
{
var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");
var host = CreateHostBuilder(args, env).Build();
host.Run();
}
catch (Exception ex)
{
throw;
}
finally
{
NLog.LogManager.Shutdown();
}
}
public static IHostBuilder CreateHostBuilder(string[] args, string env) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureAppConfiguration((IConfigurationBuilder builder) =>
{
builder.Sources.Clear();
builder.SetBasePath(Directory.GetCurrentDirectory());
builder.AddDataBaseProvider();
builder.AddJsonFile($"appsettings.{env}.json");
})
.ConfigureLogging((hostingContext, logging) =>
{
logging.ClearProviders();
logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddDebug();
logging.AddEventSourceLogger();
logging.AddFile(hostingContext.Configuration.GetSection("Logging"));
});
}
Я пытался жестко кодировать builder.AddJsonFile($"appsettings.{env}.json");
, чтобы явно обратиться к appsettings.Development. json, но ошибка не исчезла.
Как заставить приложение видеть файл appsettings.Development. json после публикации? Он отлично работает, когда я запускаю его через Visual Studio.