让IIS Express在dotnet cli web项目上运行,目标是.NetCoreApp

Rya*_*ann 2 c# asp.net-core dotnet-cli

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

dotnet new --t web --lang c#
Run Code Online (Sandbox Code Playgroud)

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

所以我使用的是IIS Express.

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

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

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

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

有任何想法吗?

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

Rya*_*ann 5

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

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

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

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

dotnet run
Run Code Online (Sandbox Code Playgroud)

这将对你的项目运行红隼,并告诉你它在哪个端口.然后你可以在浏览器中点击http:// localhost:5000(或者端口是).

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

去做这个:

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

重复"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();
    }
Run Code Online (Sandbox Code Playgroud)

那么如果您想要appSettings.json用于开发(本地),暂存和生产,那么您将创建3个appSettings.json文件

appSettings.json 
appSettings.Development.json
appSettings.Staging.json
appSettings.Production.json
Run Code Online (Sandbox Code Playgroud)

然后使用上面的选项: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>
Run Code Online (Sandbox Code Playgroud)

在那个html中,如果你正在运行"Kestrel Development",那么输出用于开发的环境标签内的html.

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