2

我在 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 中本地运行而不依赖它,我能想到的最佳选择是使用条件编译。

4

2 回答 2

7

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

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

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

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

dotnet run

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

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

去做这个:

  1. 右键单击您的项目并转到属性
  2. 单击调试选项卡
  3. 单击配置文件下拉列表旁边的新建
  4. 称之为红隼开发
  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 生产,则输出环境标记内用于暂存、生产的 html。

于 2016-07-29T01:41:32.013 回答
3

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

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

于 2016-08-16T03:22:34.163 回答