Размещение основного приложения .NET вне IIS - PullRequest
0 голосов
/ 12 ноября 2018

Я пытаюсь разместить приложение .NET Core с Kestrel, не включенным IIS. И я получаю следующую ошибку:

System.IO.FileNotFoundException: 'Could not load file or assembly 'Microsoft.AspNetCore.Server.IISIntegration, Version=2.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.'

РАЗНОЕ

class Address {
        public string ProtocolType { get; set; } = "http";
        public string Host { get; set; }
        public long Port { get; set; }
        public static Address Default = new Address { Host = "localhost", Port = 9300, ProtocolType = "http" };
    }


    static class AddressExtensions {
        public static string ToUrl(this Address @this) {
            return $"{@this.ProtocolType}//{@this.Host}:{@this.Port}";
        }
    }

Программа

public class Program {
        public static void Main(string[] args) {
            CreateWebHostBuilder(args).Build().Start();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) {
            var builder=WebHost.CreateDefaultBuilder(args); //crashes here !!

            builder.UseStartup("Startup");
            var url = Address.Default.ToUrl();
            builder.UseKestrel().UseUrls(url);
            return builder;

        }

    }

Запуск

public class Startup {
        public void ConfigureServices(IServiceCollection services) {
            services.AddMvcCore();

        }
        public void Configure(IApplicationBuilder app) {
            app.Map("/http", x => x.UseMvc());
            app.Map("/ws", x => {

            });
            app.UseMvc();
        }
    }

Почему он пытается разместить его на IIS? Я должен указать, что у меня нет launchSettings.json файла. Он не был создан из шаблона .NET Core App. Я должен сделать это вручную для запуска за пределами IIS?

Как я могу заставить этот сервер работать и работать за пределами IIS?

1 Ответ

0 голосов
/ 12 ноября 2018

Во-первых, launchSettings.json только для разработки. Он не публикуется и не используется после развертывания приложения.

Во-вторых, CreateDefaultBuilder(), помимо прочего, добавляет службы интеграции IIS. Однако это не означает, что на этом этапе у вас есть для размещения в IIS. Вы, конечно, не должны получать ошибку только потому, что включена интеграция IIS, но вы не размещаете в IIS. Если бы мне пришлось рисковать, я бы подумал, что вы используете другую версию .NET Core SDK, нежели среда выполнения, установленная на вашем сервере. Убедитесь, что они соответствуют друг другу.

Если вы хотите полностью избавиться от интеграции IIS, вам нужно прекратить использование CreateDefaultBuilder и делать то, что он делает вручную, за исключением, конечно, добавления интеграции IIS. Вы можете просмотреть источник , чтобы увидеть, о чем заботится метод.

...