Как получить. Net Core 3.1, чтобы увидеть мои файлы appsettings - PullRequest
0 голосов
/ 22 января 2020

Я создал API, используя. net Core 3.1, и, как эти вещи, он работает на моей машине. Но он также не работает на моей машине, когда я пытаюсь опубликовать sh в IIS. Я должен использовать IIS как одно из моих требований. Итак, ошибки:

  1. Ошибка HTTP 500.30 - Ошибка запуска процесса ANCM. Я перепробовал кучу вещей, но ничего не получалось. Я просмотрел файлы appsettings, чтобы посмотреть, пропустил ли я запятую или что-то в этом роде, и изменил настройки в IIS, чтобы пул приложений не управлял кодом, и отключил параметр 32-разрядного приложения.
  2. Необработанное исключение. 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.

1 Ответ

0 голосов
/ 22 января 2020

Я нашел проблему. Пул приложений для сайта использовал ApplicationPoolIdentity по умолчанию, а не мой локальный пользователь. Таким образом, он не считывал переменные среды пользователя, следовательно, он работал в Visual Studio, но не через IIS.

Мое решение было изменить

var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT");

на

var env = "name-Of-File"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...