ASP.NET核心程序在IIS上无需发布即可运行

时间:2016-08-12 04:40:47

标签: c# asp.net iis asp.net-core

我以前使用asp.net mvc4并将我的解决方案目录指向我的IIS网站位置,每次更新我的代码时,我只需单击重新构建我的解决方案然后使用w3wp的“附加到进程”

在asp.net核心;当我将我的网站发布到文件系统时,我可以使用带有无托管代码的iis运行我的网站。但是当我将我的iis网站指向我的网站解决方案代码时,它显示502错误。我以前安装过的所有asp.net核心模块。

4 个答案:

答案 0 :(得分:4)

您不需要在IIS中运行.Net Core,以便像我们过去所做的那样轻松进行调试。

使用.Net Core,您只需在项目根目录下打开一个命令行,然后键入" dotnet run"

DotNet Run使用环境变量来驱动它的功能。因此,如果您希望您的站点在特定的URL或端口上运行,请键入:

<div class="container">
  <div class="col-md-8">
    <h1>This works amazing on mobile</h1>
    <p>The Museum's rich and varied collections allow us to present money as a fascinating cross-curricular topic. We have consulted widely with teachers and other education professionals to deliver a schools' service which closely supports the Curriculum for Excellence. We hope that you will find it both exciting and relevant!</p>
      <div ><h2>But this is shocking on desktop</h2>
    <p>Children visiting the Museum will engage in hands-on activities based around our extensive collection of original artefacts. These sessions are led by Museum staff and are free of charge. To find out more about the themes we cover, how a school visit is structured, and how to make a booking, please see below.</p>
<p>At present the activities are largely aimed at upper primary pupils (P5-7) and a maximum class size of 33. However, we are happy to adapt them for secondary pupils and visitors with special needs. Please contact us to discuss your requirements.</p>

    <h2>I want to be with the big boys! ^</h2>
    <p>Children visiting the Museum will engage in hands-on activities based around our extensive collection of original artefacts. These sessions are led by Museum staff and are free of charge. To find out more about the themes we cover, how a school visit is structured, and how to make a booking, please see below. 

At present the activities are largely aimed at upper primary pupils (P5-7) and a maximum class size of 33. However, we are happy to adapt them for secondary pupils and visitors with special needs. Please contact us to discuss your requirements.</p>
</div>
  </div>
  <div class="col-md-4">
    <div class="well"><h1>Sidebar Content</h1></div>
    <div class="well"><h1>Sidebar Content</h1></div>
        <div class="well"><h1>Sidebar Content</h1></div>
  </div>

</div>

或者,如果您只是希望它在不同的端口上运行

SET ASPNETCORE_URLS=http://example.com

然后设置环境

SET ASPNETCORE_URLS=http://localhost:8080

设置完所有环境变量后,键入

SET ASPNETCORE_ENVIRONMENT=Development

现在要调试它,你附加到带有dotnet的cmd.exe在其标题中运行。您将能够以这种方式调试代码。

现在,如果您使用的是Visual Studio,则会有一个名为&#34; launchSettings.JSON&#34;的文件。在项目中的属性下。你可以在这里配置配置文件,我将我的默认配置文件设置为Kestrel Development,然后设置为Kestrel Production,其中IIS已经过时,因此我不会在IIS Express中运行F5。

我的LaunchSettings.json看起来像这样:

dotnet run

第一个配置文件是F5按下它时使用的配置文件。因此,当我按F5时,Visual Studio会为我启动dotnet运行并设置环境和URL,这是我在launchSettings.JSON中的配置文件的environmentVariables部分所指定的。

现在因为我有多个配置文件,我在运行按钮旁边有一个下拉菜单,所以如果我想在本地生产模式下运行,我可以选择Kestrel Production。

enter image description here

答案 1 :(得分:1)

简单回答:发布时,您调用启动publish-iis工具的脚本(请参阅script中的project.json部分)。

在您的项目中,您拥有web.config文件,其中包含以下内容:

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" 
 stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/

如您所见,有占位符"%LAUNCHER_PATH%"%LAUNCHER_ARGS%参数。请记住这一点。

现在打开你的project.json文件,你会看到一个“脚本”部分看起来+/-像这样:

“脚本”: { “postpublish”:“dotnet publish-iis --publish-folder%publish:OutputPath% - framework%publish:FullTargetFramework%” }

它告诉dotnet在发布应用程序后运行publish-iis工具。 How it works

  

publish-iis工具转到发布应用程序的文件夹(而不是项目文件夹),并检查它是否包含web.config文件。如果没有,它将创建一个。如果是这样,它将检查你有什么样的应用程序(即它是针对完整的CLR还是Core CLR,以及 - 对于Core CLR - 无论是可移植的还是独立的应用程序)并将设置processPath和arguments属性的值去除途中%LAUNCHER_PATH%和%LAUNCHER_ARGS%占位符。

答案 2 :(得分:1)

请遵循以下步骤来实现您想要的目标。

  1. 在launchSettings.json中,在iis下添加一个名为iisSettings的属性,如下所示:

    "iis": {
      "applicationUrl": "http://my.aspnetcoreapp.com"
    }
    
  2. profiles部分下,添加一个commandName设置为IIS的新配置文件。我叫我的Local IIS。这样会在“运行”下拉菜单中添加一个名为Local IIS的新选项。

    "Local IIS": {
      "commandName": "IIS",
      "launchBrowser": true,
      "launchUrl": "http://my.aspnetcoreapp.com",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
    
  3. 在IIS中创建一个网站。将主机名设置为my.aspnetcoreapp.com。还要为此网站创建/使用一个应用程序池,该应用程序池的.NET CLR版本设置为“无托管代码”。

  4. 将网站的物理路径设置为asp.net核心项目的位置,而不是解决方案的位置,当然,除非您将项目与解决方案放在同一文件夹中。
  5. 在主机文件中添加回送条目(对于Windows C:\ Windows \ System32 \ drivers \ etc \ hosts

      

    127.0.0.1 my.aspnetcoreapp.com

  6. 返回到Visual Studio,然后运行该应用程序。确保从“运行”下拉列表中选择了“本地IIS”配置文件。简短的加载消息显示“ Provisioning IIS ...”

  7. 后,这将在URL中的浏览器中启动应用程序。

  8. 完成!从现在开始,您可以在该URL上启动应用程序,还可以通过附加到进程 w3wp 进行调试。

您还可以通过将ULR指定为localhost/MyAspNetCoreApp而不是my.aspnetcoreapp.com,将您的应用托管在“默认网站” 下。如果这样做,将创建一个名为MyAspNetCoreApp AppPool的新应用程序池。

答案 3 :(得分:-2)

只需运行Ctrl + F5即可在运行网站时更改代码,而无需重新启动。