IIS中托管的Asp.Net Core应用程序 - 如何传递启动参数

Sko*_*šek 6 iis asp.net-core

我有一个Asp.Net核心应用程序,可以在IIS中托管或作为WindowsService.

这是Program.cs的一部分

public static class Program
{
    public static void Main(string[] args)
    {
        var hostAsWindowsService = !args.Contains("--web");

        var contentRoot = hostAsWindowsService ? Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) : Directory.GetCurrentDirectory();

        var config = new ConfigurationBuilder()
            .SetBasePath(contentRoot)
            .AddJsonFile("host.json")
            .AddCommandLine(args)
            .AddEnvironmentVariables()
            .Build();

        var environment = config["environment"];
        var urls = config["server.urls"];
        var certificateFilename = config["certificate.filename"];
        var certificatePassword = config["certificate.password"];

        var hostConfig = new WebHostBuilder()
            .UseConfiguration(config)
            .UseUrls(urls)
            .UseContentRoot(contentRoot)
            .UseKestrel(options =>
                        {
                            if (!string.IsNullOrWhiteSpace(certificateFilename))
                            {

                                options.UseHttps(contentRoot + certificateFilename, certificatePassword);
                            }
                        })
            .UseStartup<Startup>();

        if (!string.IsNullOrWhiteSpace(environment))
        {
            hostConfig.UseEnvironment(environment);
        }

        if (hostAsWindowsService)
        {
            hostConfig
                .Build()
                .RunAsEycService();
        }
        else
        {
            hostConfig
                .UseIISIntegration()
                .Build()
                .Run();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

托管为Windows服务时,我无法传递参数,因此默认情况下,项目作为WS托管.我可以在启动我的站点时将参数传递给IIS,以便在Main方法中使用正确的宿主(args.Contains(" - web"))?

我试图将参数传递给Windows服务主机:

1)sc.exe创建MyService binPath ="c:\ Projects\MyService.exe --ws = true"

2)在Windows服务对话框中将"--ws = true"添加到"启动参数"(它实际上不会保存)

小智 0

我知道这是一个老问题 - 但以防万一其他人遇到这个问题(就像我刚才所做的那样)。

  • 转到 IIS 管理器中的站点
  • 打开“配置编辑器”
  • 在“部分”下拉列表中的“system.webServer”下,单击“aspNetCore”。
  • 在“来自”下拉列表中选择“ApplicationHost.config <location path='your-site-name' />”
  • 您现在可以在“参数”下输入命令行参数。

请注意,通过使用“ApplicationHost.config”而不是“您的站点 Web.config”,即使在重新发布站点(覆盖 web.config 文件)后,您也可以保留该设置