踩了一晚的坑,本想詳細寫下的,剛才回復同事消息花了些時間,要睡覺了,簡短寫下吧
1、發布
.net core不用不停地編譯了,只要保存即可,配合dotnet watch run就行,這玩意會實時編譯,類似java的jrebel
反而是手動編譯要報錯,如果IIS是指向開發目錄,會報不能覆蓋文件,就是生成的快捷鍵要去掉了,我原先是設置Ctrl + Shift + S是生成,因為原先改后端要不停生成,改前端用生成也會保存,所以就設置這個快捷鍵。現在要換回【全部保存】了
2、發布
發布到IIS,聽說不能覆蓋,也會報錯。只能發布到一個目錄,再手動復制過去才能覆蓋,直接用發布去覆蓋是不行的。網上這么說的,我沒試過。
3、IIS
之前寫過,直接用IIS是不行的,要裝SDK什么的,網上有。
裝完后,直接指向開發目錄也是不行的,會報不能覆蓋。指向發布目錄是可以,但總不能改個字就去發布一下吧(而且還可能也是無法覆蓋)
要把Web.Config里命令改成dotnet,參數改成watch run,這樣就可以了,還有個日志的參數可以開起來,記錄文本日志,便於報錯時排查問題。日志如果放在某目錄下,那個目錄要先建好,它不會直接建。
有了watch run,就可以保存后即生效(原理雖然也是dotnet停了再啟動,但非常快,和原先生成一樣,原先生成DLL本來也不快)
IIS可以直接配端口(相當於反向代理),如果是命令行要配端口,要改一行代碼,使用appsettings.json里的配置即可,如:"urls": "http://localhost:95;"
public class Program { public static void Main(string[] args) { var config = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true) .Build(); WebHost.CreateDefaultBuilder(args) .UseConfiguration(config) .UseStartup<Startup>() .Build().Run(); } }
4、調試
附加到進程,用了網上寫.cmd來啟動(不用IIS)的方法,也是不行,仍然是好多個dotnet進程,我開了個WEB和API,都有八九個進程。。。都不知要附加哪個,不過附加第一個或第二個基本就可以,不知這個有沒有排序,還是靠運氣。
用IIS的話,也會有多個,但會好一些,一般一個項目有兩個(我開了WEB和API后有四個),也是靠猜,基本也是前兩個,搜了一圈沒有好辦法。
折騰一晚后,算是對各個配置項有了些理解,看網上下載的代碼,其它的都是正常的業務邏輯了,.net core就是開頭這些配置弄清楚,能正常開發,就可以了,還是有很多不同的,整體架構都不一樣了,所有想配置的地方也不一樣了,主要是配置項,語法完全一樣