.net Core 踩坑记:生成、发布、IIS、调试

踩了一晚的坑,本想详细写下的,刚才回复同事消息花了些时间,要睡觉了,简短写下吧

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就是开头这些配置弄清楚,能正常开发,就可以了,还是有很多不同的,整体架构都不一样了,所有想配置的地方也不一样了,主要是配置项,语法完全一样