在基于传统的.NET Framework的Asp.Net Mvc的时候,本地开发环境中可以在IIS中建立一个站点,可以直接把站点的目录指向asp.net mvc的项目的根目录。然后build一下就可以在浏览器里面刷新到最新的修改了,也可以附加到w3wp的进程进行调试。但是在开发基于.Net Core的Asp.Net Core项目的时候,这样的做法已经无法满足我们的需要了:

  1. 更改完代码build一下,无需部署即可在浏览器得到最新的更改。

  2. 附加到进程调试。

Asp.Net Core的项目需要先Pubilsh一下才能部署到IIS,而且中间需要一个AspNetCoreModule的模块来中转一下。这主要是因为Asp.Net Core的项目本质上来说是一个Console类型的项目,而且它自带了Kertrel组件来监听HTTP请求。这就使得IIS不再负责Asp.Net Core的运行了,而是作为一个反向代理来使用的,如下图所示:

那么如何优雅在满足上面提到的2点需要呢?本文源代码位于(https://github.com/linianhui/aspnetcore/tree/master/dotnet-watch-run)

dotnet watch

dotnet watch 属于dotnet cli tool里面的一部分功能,其用途在于扩充dotnet cli的命令,为它们添加一个监视的功能,即在使用cli运行dotnet core的项目的时候,当你修改了项目的源代码,那么save一下源码,即可刷新得到最新的更改。比如我们用 dotnet run 运行了我们的一个Asp.Net Core项目,想要修改的话就需要先停止运行,然后修改代码,再一次运行才能看到结果。而如果使用了 dotnet watch run 来运行的话则省去了停止运行的过程,直接修改保存即可。享受到这样的好处只需再你的csproj文件中增加一个引用即可。

<ItemGroup><DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" /></ItemGroup> 

当我修改了ValuesController.cs文件的内容的时候,watch会自动退出当前正在运行的进程,然后再一次启动它。是不是很方便呢?

IIS中的 dotnet watch

如何把Asp.Net Core部署到IIS这里就不解释了,只贴一下我写的Cake部署脚本:

 1 #addin "Cake.IIS"  2 #addin "Cake.Hosts"  3 #addin "Cake.FileHelpers"  4 #addin "Cake.Powershell" 5    /// params  7 var target = Argument("target", "default");  8   9 /// iis web site config 10 var webSiteConfig = new { 11     host = "api.asp-net-core.dev", 12     path = "./src", 13     appPoolName = "apppool.noclr" 14 }; 15  16 /// deploy task 17 Task("deploy") 18     .Does(() => 19 { 20     DeleteSite(webSiteConfig.host); 21  22     CreateWebsite(new WebsiteSettings() 23     { 24         Name = webSiteConfig.host, 25         Binding = IISBindings.Http.SetHostName(webSiteConfig.host) 26                                   .SetIpAddress("*") 27                                   .SetPort(80), 28         ServerAutoStart = true, 29         PhysicalDirectory = webSiteConfig.path, 30         ApplicationPool = new ApplicationPoolSettings() 31         { 32             Name = webSiteConfig.appPoolName, 33             IdentityType = IdentityType.LocalSystem, 34             MaxProcesses = 1, 35             ManagedRuntimeVersion = null 36         } 37     }); 38          39     AddHostsRecord("127.0.0.1", webSiteConfig.host); 40 }); 41  42 /// open browser task 43 Task("open-browser") 44     .Does(() => 45 { 46     StartPowershellScript("Start-Process", args => 47     { 48         args.Append("chrome.exe") 49             .Append("'-incognito'") 50             .Append(", '" + webSiteConfig.host + "'"); 51     }); 52 }); 53  54  55 /// default task 56 Task("default") 57 .IsDependentOn("deploy") 58 .IsDependentOn("open-browser"); 59  60 RunTarget(target);

由于我们要使用dotnet watch这个命令,所以在部署的时候并没有对Asp.Net Core的项目进行Build和Publish,而是直接指向了其源代码目录。那么在哪里让IIS执行dotnet watch呢?答案是web.config里面:

 1 <?xml version="1.0" encoding="utf-8"?>  2 <configuration> 3   <system.webServer>  4     <handlers>  5       <remove name="aspNetCore" />  6       <add name="aspNetCore"  7            path="*"  8            verb="*"  9            modules="AspNetCoreModule" 10            resourceType="Unspecified" /> 11     </handlers> 12     <aspNetCore processPath="dotnet" 13                 arguments="watch run" 14                 stdoutLogEnabled="true" 15                 shutdownTimeLimit="2" 16                 stdoutLogFile=".\_log\" /> 17   </system.webServer> 18 </configuration>

其中重点在于aspnetcore节点的processPath="dotnet"和arguments="watch run"。这个配置节点是供AspNetCoreModule使用的,其详细的配置参数请移步这里:https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module。这样在IIS中访问的时候,AspNetCoreModule就会使用 dotnet watch run来运行我们的项目。就可以实现编辑代码->保存->在浏览器中刷新就可以直接看到结果了!。

使用附加到进程调试IIS中的Asp.Net Core

由于Asp.Net Core是单独运行的Console应用,所以调试部署在IIS中的Asp.Net Core的时候就不是像之前那样附加到w3wp进程了,而是运行项目的dotnet进程(由dotnet watch run运行起来的嘛)。

。。。。。。一下子有四个dotnet的进程,到底是哪一个呢?我也不知道,,,查了半天也没查出来原因,可以确定是受的arguments="watch run"影响:

  1. arguments="watch run":4个。

  2. arguments="run":2个。

  3. arguments=".\bin\debug\netcoreapp2.0\Dotnet.Watch.Run.dll":1个。

有了解这块的麻烦告知,谢谢!

参考

本文源代码:https://github.com/linianhui/aspnetcore/tree/master/dotnet-watch-run

AspNetCoreModule:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/aspnet-core-module?tabs=aspnetcore2x

AspNetCoreModule Config:https://docs.microsoft.com/en-us/aspnet/core/hosting/aspnet-core-module

Kertrel:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?tabs=aspnetcore2x

dotnet watch:https://docs.microsoft.com/en-us/aspnet/core/tutorials/dotnet-watch

原文:http://www.cnblogs.com/linianhui/p/asp-net-core-with-iis-and-dotnet-watch-run.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com 

IIS中的 Asp.Net Core 和 dotnet watch相关推荐

  1. 在IIS中调试ASP.NET Core应用程序

    IIS中的调试提供了更平滑的开发过程,无需考虑您的Web服务器是否正在运行. 我已经使用ASP.NET核心了一段时间,并且总是错过了Visual Studio中的直接IIS支持.必须记住启动项目才能启 ...

  2. .NET Core 3.0 Preview 6中对ASP.NET Core和Blazor的更新

    我们都知道在6月12日的时候微软发布了.NET Core 3.0的第6个预览版.针对.NET Core 3.0的发布我们国内的微软MVP-汪宇杰还发布的官翻版的博文进行了详细的介绍.具体的可以关注&q ...

  3. 更新丨.NET 7 预览版2 中的 ASP.NET Core

    点击上方蓝字  关注我们 (本文阅读时间:6分钟) .NET 7 预览版2 现已推出,其中包括对 ASP.NET Core 的许多重大改进. 以下是此预览版中新增内容的摘要: • 推断来自服务的 AP ...

  4. .NET开发框架(五)-IIS上部署ASP.NET Core项目教程

    在之前教程中,我们分享了框架的功能与视频演示介绍(文尾底部提供往期教程快捷链接) 系列教程:从初学者到架构师的一步步蜕变 本篇经验将和大家介绍如何在IIS上部署ASP.NET Core项目,希望对初学 ...

  5. 在Linux和Windows的Docker容器中运行ASP.NET Core

    译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了.那么我就来翻译一下这篇文章,让更多的中文读者看到.当然Scott遇到的坑我也遇 ...

  6. 在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

    前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布 ...

  7. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  8. windows 服务中托管asp.net core

    在windows 服务中托管asp.net core SDK 2.1.300 官方示例 1.添加运行标识符 xml <PropertyGroup> <TargetFramework& ...

  9. 在IIS上部署ASP.NET Core Web API

    目录 Visual Studio 2019和Dot Net Core 3.0 Windows Server上的Dot Net Core运行时 在服务器上启用IIS IIS应用程序池 IIS网站 创建A ...

最新文章

  1. 【BZOJ 3879】SvT
  2. 努比亚红魔有人脸识别_魅族魅蓝6T、努比亚红魔Mars电竞手机、华为畅享10Plus对比...
  3. Fedora 8中驱动ASUS6摄像头
  4. 关系型数据库,第一!
  5. java合并多个表格为一个_多个DataTable的合并成一个新表
  6. 7-210 英文单词排序 (25 分)
  7. Python 分析到底是谁操纵《庆余年》上了热搜?
  8. jpype,jpython调用jar包中jdk的问题.
  9. Linux中的sort排序
  10. 蓝桥杯.奇妙的数字(暴力)
  11. 为什么要分层?数据仓库分层架构深度讲解
  12. usb转rs485 linux驱动下载,USB转RS485串口驱动
  13. 基于JAVA高校信息资源共享平台计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  14. SQL查询时间段方法
  15. 狂神说java-Mybatis
  16. 测试工程师需要准备哪些知识
  17. 非常漂亮的放焰火效果的Applet程序
  18. 改变xp开机和关机画面的方法
  19. AI时代下的教育新模式---“青少年人工智能教育”
  20. 面向对象三大特性(继承)

热门文章

  1. 1、Locust压力测试环境搭建
  2. 以软件推动工业进步 -嵌入式学习网站
  3. git的安装与使用(一)--windows平台 .
  4. C# 死锁的原理与排查方法详解
  5. 30分钟通过Kong实现.NET网关
  6. .NET网站国际化策略
  7. C#Socket通信
  8. 终于来了!微软正式推出 VS Code 测试 API
  9. VS2022+.NET6+C#10,.NET开发起飞
  10. ML.NET Cookbook:(12)我想看看模型的系数