【问题标题】:Keep IIS Express Running on dotnet cli web project targetting .NetCoreApp让 IIS Express 在针对 .NetCoreApp 的 dotnet cli Web 项目上运行
【发布时间】:2016-08-16 11:22:34
【问题描述】:

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

dotnet new --t web --lang c#

我的网站在 .NetCoreApp 上运行良好。但是,我无法在不添加中间件的情况下在 IIS 中加载站点,具体取决于 IIS,我不想这样做。

所以我使用的是 IIS Express。

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

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

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

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

有什么想法吗?

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

【问题讨论】:

  • 您应该再次检查描述,并明确区分IIS和IIS Express。目前你将两者混为一谈,这个问题很难理解。
  • 现在我知道了如何使用我想要的“dotnet run”,整个事情都变得无关紧要了。我的目标是让我的网站在没有附加调试器的情况下运行。 dotnet run 和 kestrel 工作得很好。我会尽快删除这个问题。
  • @Ryios 请不要删除这个问题......而是考虑发布您的解决方案作为答案。谢谢

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


【解决方案1】:

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

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

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

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

dotnet run

这将对您的项目运行 kestrel 并告诉您它在哪个端口上。然后您可以在浏览器中点击http://localhost:5000(或使用端口)。

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

为此:

  1. 右键单击您的项目并转到属性
  2. 点击调试标签
  3. 点击配置文件下拉列表旁边的新建
  4. 叫它 Kestrel Dev
  5. 将启动类型更改为“项目”
  6. 将应用程序参数设置为“dotnet run”
  7. 为“ASPNETCORE_ENVIRONMENT”添加环境变量
  8. 将值设置为“开发”
  9. 为“ASPNETCORE_URLS”添加环境变量
    1. 给它一个值“http://localhost:8080”或您希望它运行的任何 url/端口。

对“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

然后,您可以使用上面的 option: true config 选项将 .Staging.Json 等文件设为可选。

因此,在 appSettings.json 中,所有环境中的所有内容都相同。

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

等等等等

您为每个环境创建一个配置文件,因此如果您运行“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,则输出环境标签内用于 staging,production 的 html。

【讨论】:

  • 很高兴为您提供帮助,只是希望我没有花 2 个小时来解决这个问题。我建议在开始核心项目之前阅读所有 dotnet cli 命令教程。现在,我只需要让 bundleConfig.Json 和所有标签助手工作就可以了。
  • 好的 ...因为这是全新的技术,我想会有更多的问题和自我回答吗? :)
  • 值得注意的是,我确实弄清楚了如何让它在 IIS 中运行,但是因为你必须将它发布到另一个文件夹,你不能在 IDE 中进行更改并刷新页面,你必须每次您想查看更改时都运行 dotnet publish,这违背了目的。所以 dotnet run 似乎是最好的方法。
  • 更新了我的答案,我想出了如何让 f5 运行红隼。只需编辑 launchSettings.json 并在 IIS Express 配置文件上方制作 kestrel 配置文件。
【解决方案2】:

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

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

【讨论】:

  • 将 IIS 指向项目文件夹不适用于 .Net Core。项目文件夹不包含 DotNet Core 的运行时,因此无法加载。您必须将 IIS 指向已发布的 Dot Net Core 文件夹,该文件夹是您通过运行 DotNet Publish 获得的,最终会出现在您的 bin\debug 文件夹中,然后您无法对其进行实时更改,您必须使用 dotnet 命令重新发布线。 IIS express 部分是有效的。
  • 让 dotnet 在终端窗口中运行解决了这个问题,您可以对站点进行实时更改,而只需为编译的代码更改重新构建。我也觉得 Kestrel 方式是最好的方式,因为它可以确保您的开发流程适合跨平台 Jedi Ways。
  • 如果您有正确的配置,指向项目文件夹确实有效,诚然这并不容易。例如,确保在 IIS 中安装了 AspNetCoreModule,确保 ApplicationPoolIdentity 对项目文件夹具有权限,确保 web.config 不包含需要替换为 .NET 的参数化条目(如 %LAUNCHER_PATH%)。我忘记了完成它所需的一些麻烦。
  • 即使在 IIS 或 IIS Express 下运行,您也将使用 Kestrel 作为服务器。 IIS 只是宿主进程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-05-28
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 2020-01-07
  • 2017-10-11
  • 1970-01-01
相关资源
最近更新 更多