2016-07-29 39 views
2

我在Visual Studio中有一个dotnet cli WebApp,使用新的xproj扩展和project.json。保持IIS Express在dotnet cli web项目上运行.NetCoreApp

dotnet new --t web --lang c# 

我得到了一个网站的工作和运行.NetCoreApp就好了。但是,我无法在IIS中加载该站点,而无需向其中添加中间件,这取决于IIS,我宁愿不这样做。

所以我使用IIS Express。

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

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

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

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

任何想法?

(可选)我如何配置它在本地在IIS中运行而不依赖于它,最好的选择是我可以在那里使用条件编译。

+0

您应该再次检查描述并清楚区分IIS和IIS Express。目前你将两者混合在一起,这个问题很难理解。 –

+0

现在我想出了如何使用“dotnet run”,这就是我想要的。我的目标是让我的网站在没有附加调试器的情况下运行。 dotnet运行和红隼工作得很好。 我会很快删除这个问题。 –

+0

@Ryios请不要删除这个问题...而是考虑张贴您的解决方案作为答案。谢谢 – objectNotFound

回答

5

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

结果很简单。

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

只需打开一个终端或命令提示符下您的项目根型:

dotnet run 

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

更新:你可以杀死你对IIS Express的依赖,也可以在你的整个应用程序中使f5运行在Kestrel中。

要做到这一点:

  1. 右键单击您的项目并转到属性
  2. 单击调试选项卡
  3. 单击新建的配置文件旁的下拉
  4. 叫它红隼开发
  5. 将启动类型更改为“Project”
  6. 将应用参数设置为“dotnet run”
  7. 添加的环境变量为“ASPNETCORE_ENVIRONMENT”
  8. 将值设置为“发展”
  9. 添加的环境变量为“ASPNETCORE_URLS”
  10. 给它的一个值“http://localhost:8080”或者你想让它运行的任何网址/端口。

重复的“茶隼生产”上面的选项,但设置ASPNETCORE_ENVIRONMENT到“生产”

的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 

然后你做.Staging.Json等文件可选,上面有选项:true config选项。

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

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

等等等等

您为每个环境创建一个配置文件,因此,如果您运行的“茶隼发展”它使用appSettings.Development.Json

如果你运行“隼转移”,它使用appSettings.Staging以.json。

如果您运行“红隼生产”,它使用appSettings.Production.json。

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

<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。

+0

谢谢。这很有帮助。 – objectNotFound

+0

很高兴帮助,只是希望它不需要我花2个小时就能搞定。我建议在开始核心项目之前阅读所有的dotnet cli命令教程。 现在,我只需要获取bundleConfig.Json以及所有标记帮助器的工作和我的业务。 –

+0

好的...因为这是所有全新的科技我想更多的问题和自我解答然后呢? :) – objectNotFound

3

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

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

+0

将IIS指向项目文件夹不能与.Net Core一起使用。该项目文件夹不包含DotNet Core的运行时间,因此无法加载。您必须将IIS指向已发布的Dot Net Core文件夹,该文件夹通过运行DotNet Publish获得,并且将在bin \ debug文件夹中结束,然后您无法对其进行实时更改,必须使用dotnet命令重新发布线。 尽管IIS express部分有效。 –

+0

使dotnet在终端窗口中运行可解决问题,您可以对网站进行实时更改,并且只需重新编译代码更改即可。我也觉得这样做Kestrel方式是最好的方式,因为它可以确保您的开发流程符合跨平台Jedi方式。 –

+0

如果您拥有正确的配置,指向项目文件夹确实可行,但这确实不容易。例如,确保IIS中已安装AspNetCoreModule,确保ApplicationPoolIdentity对项目文件夹具有权限,确保web.config不包含像%LAUNCHER_PATH%这样需要用.NET替换的参数化条目。我忘了一些需要把它关掉的麻烦。 – OdeToCode

相关问题