计划把项目迁移到dotnetcore,技术准备中,现在遇到以下几个问题:
1、我现在使用 supervisor 做监视器,用于开机启动站点服务,用nginx的反向代理功能链接到站点。
问题:是否dotnet的网站一般都是独立运行一个进程(独立一个监听端口),就类似tomcat那样?
2、我对demo项目配置了命令行支持和配置文件hosting.json支持,用于为站点提供不同的监听地址和端口。配置hosting.json时设定了修改后自动重载。
问题:如果hosting.json里配置了host信息,修改hosting.json后的重载是否能导致站点(dotnet 应用进程)的host信息同时修改?在我实验里,发现并没有被重新修改。
3、dotnet publish命令发布时,是不能把目标文件夹指向运行中的应用文件夹的,会报告文件锁定的错误,但是,可以通过发布到其它文件夹再把文件复制过去覆盖。
问题:程序文件夹的文件(特别是配置文件、dll文件等)被修改后,是否会导致应用的重新启动?就类似于IIS中的dll和web.config被修改后进程被重置那样。
4、dotnet publish发布后,会把views文件夹的所有cshtml也预编译了,虽然性能提升了,也有优缺点。
问题:如何控制dotnet publish不预编译views文件夹?
谢谢!
问题1:每个dotnet项目都会独立一个进程,感觉的确有点像Tomcat。但是如果你一个进程中绑定了多个外部项目,那就不好说了。
问题2:修改Json后配置不会及时修改这个是Core的一个通病,因为无论如何Core都只是一个应用程序,而不再是Web程序,所以所有的配置都是在启动时加载完成的。修改配置需要重启项目。我在博客里说过类似的一个问题。
问题3:直接替换如果是附属的dll好像还没有问题(具体没试过),但是如果是直接替换主要的dll,一般来讲进程是阻止你这么干的,强制的话会杀掉进程,跟重启也没什么两样了(我猜的)
问题4:有个大哥回答了,我没试过,就不说了。其实如果问题3,能解决,让他预编译也没什么问题不是?
问题2、问题3:按照你说的,如果我们把项目都写成一个外壳模块和业务模块,这样,可以把外壳固化,而业务动态,只要不修改外壳相关的内容(比如监听端口等),是无需重新启动的。
是这个意思吧?