保持IIS Express在dotnet cli web项目上运行.NetCoreApp

时间:2016-07-29 00:33:46

标签: c# asp.net-core dotnet-cli

我在Visual Studio中使用新的xproj扩展和project.json创建了一个dotnet cli WebApp。

dotnet new --t web --lang c#

我有一个网站在.NetCoreApp上运行并运行就好了。但是,我无法在不添加中间件的情况下在IIS中加载该站点,具体取决于IIS,我宁愿不这样做。

所以我使用的是IIS Express。

为此,我必须在调试模式下运行项目以运行IIS以便能够使用该站点。

我想知道的是我如何让IIS Express保持运行,并在运行项目时附加到它。

我已阅读有关禁用"编辑并继续"的所有指南。这确实适用于ASP.Net Web应用程序,但这是一个dotnet核心WebApp,并不是同一个项目类型。它没有“属性”窗口,其中包含禁用“编辑”和“继续”的选项,并且在IDE的“调试选项”中禁用“编辑并继续”无效。

当我停止运行项目时,IIS关闭。

有什么想法吗?

或者,如何将其配置为在IIS中本地运行而不依赖它,我可以提出的最佳选择是使用条件编译。

2 个答案:

答案 0 :(得分:5)

我的问题的全部目的是能够在不使用Visual Studio中的f5且没有附加调试器的情况下运行我的站点。

事实证明,解决方案很简单。

您可以在控制台终端的Kestrel中运行它。

只需打开终端或命令提示符到项目根目录并输入:

dotnet run

这会对您的项目运行红隼,并告诉您它所在的端口。然后,您可以在浏览器中点击http://localhost:5000(或端口是)。

更新:您可以在整个应用程序中终止对IIS Express的依赖,并在Kestrel中运行f5。

要做到这一点:

  1. 右键单击您的项目并转到属性
  2. 单击调试选项卡
  3. 点击个人资料下拉列表旁边的新建
  4. 称之为Kestrel Dev
  5. 将启动类型更改为“项目”
  6. 将应用程序参数设置为“dotnet run”
  7. 为“ASPNETCORE_ENVIRONMENT”
  8. 添加环境变量
  9. 将值设置为“开发”
  10. 为“ASPNETCORE_URLS”添加环境变量
    1. 为其指定值“http://localhost:8080”或您希望其运行的任何网址/端口。
  11. 重复“Kestrel Production”的上述选项,但将ASPNETCORE_ENVIRONMENT设置为“Production”

    ASPNETCORE_ENVIRONMENT用于处理您的json配置转换。

        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();
    
            Configuration = builder.Build();
        }
    

    那么如果您想要appSettings.json进行开发(本地),登台和制作,那么您将创建3个appSettings.json文件

    appSettings.json 
    appSettings.Development.json
    appSettings.Staging.json
    appSettings.Production.json
    

    然后使用上面的选项:true config选项使.Staging.Json等文件可选。

    所以在appSettings.json中,你拥有在所有环境中都一样的东西。

    然后在appSettings.Development.json中,您可能拥有在本地运行时只需要的东西。

    Etc等

    您为每个环境创建一个配置文件,这样如果您运行“Kestrel Development”,它将使用appSettings.Development.Json

    如果你运行“Kestrel Staging”,它会使用appSettings.Staging.Json。

    如果你运行“Kestrel Production”,它会使用appSettings.Production.json。

    这也会影响您的tagHelper在MVC视图中的工作方式,例如

    <environment names="Development">
        <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
        <link rel="stylesheet" href="~/css/site.css" />
    </environment>
    <environment names="Staging,Production">
        <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css"
              asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
              asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
        <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
    </environment>
    

    在该html中,如果您正在运行“Kestrel Development”,那么将输出用于开发的环境标记内的html。

    如果您正在运行Kestrel Production,那么将输出用于登台,生产的环境标记内的html。

答案 1 :(得分:3)

如果在没有调试器的情况下运行(Ctrl + F5或菜单Debug - &gt; Run Without Debugger),应用程序将继续在IIS Express中运行(假设您使用默认设置)。您可以进行更改并刷新浏览器,而无需发布或重新启动。

使用常规IIS,您可以将网站/应用程序指向项目文件夹,并且您无需在每次更改后发布。