
部署前的准备:别等踩坑再补环境
很多新手跳过这步直接打包,结果踩坑后再回头补环境,浪费时间。部署Vue+.NET6项目前,你得先确认三件事:装对.NET6运行时、开对IIS组件、检查ASP.NET Core模块——这些是基础中的基础,缺一个都跑不起来。
先讲.NET6运行时:你写项目用的是.NET6,部署的服务器上就得装对应的运行时(不是SDK,SDK是开发用的,运行时更小)。怎么检查?打开服务器的命令提示符,输入dotnet info
,如果能看到“.NET Runtime 6.x”的版本,说明装对了;要是提示“dotnet不是内部或外部命令”,就得去微软官网下载.NET6 Runtime(https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0nofollow),双击安装一路下一步就行。
然后是IIS组件:Windows服务器默认可能没开IIS,你得去“控制面板-程序-启用或关闭Windows功能”里勾选——要选“Internet Information Services”下的Web管理工具(全选)和万维网服务(展开后选“应用程序开发功能”里的“ASP.NET Core模块”“ASP.NET 4.8”,还有“常见HTTP功能”里的“静态内容”)。别嫌麻烦,“ASP.NET Core模块”是IIS处理.NET6请求的关键,小周之前就是没选这个,结果后端部署后直接500错误,查了半小时日志才发现。
最后检查ASP.NET Core模块:打开IIS管理器,点击左侧服务器名称,再点右侧“模块”,如果能看到“AspNetCoreModuleV2”,说明没问题;要是没有,就得装.NET Core Hosting Bundle(https://dotnet.microsoft.com/zh-cn/download/dotnet-hosting/6.0nofollow)——这个包会自动装ASP.NET Core模块和运行时,新手直接装这个更省心。
前端Vue项目:打包时避开90%的路径坑
Vue项目的打包坑,90%都出在publicPath配置上——我帮过三个朋友解决过这个问题,包括我自己第一次打包时也踩过。你打开Vue项目的vue.config.js
文件(没有就自己建一个),找到publicPath
这个配置项,默认是"/"
,一定要改成"./"
——别问为什么,先改了再说,后面我给你讲原理。
为什么要改?举个例子:你用默认的"/"
打包,生成的dist文件夹里,js文件的路径是/js/app.js
,意思是从网站的根目录(比如http://localhost)加载这个文件。但如果你的项目部署在IIS的子站点(比如http://localhost/myproject),根目录是localhost,而你的dist文件夹在myproject下的frontend目录里,这时候浏览器会去localhost找js文件,肯定找不到啊!改成"./"
后,路径会变成./js/app.js
,代表“当前文件夹下的js文件”,不管部署到哪个目录,都能正确找到静态资源。
改完配置,运行npm run build
打包,生成的dist文件夹里有index.html、js、css、img这几个文件。接下来把dist里的所有内容复制到服务器上的IIS站点目录——比如你打算把项目放在D:MyProject
下,就建个frontend
文件夹,把dist内容粘贴进去(路径:D:MyProjectfrontend)。别直接把dist文件夹扔进去,要复制里面的文件,不然index.html会找不到依赖。
后端.NET6项目:发布时带全依赖,别漏文件
.NET6项目的发布坑,大多是“漏文件”——比如发布时没带全依赖,或者配置错了目标框架。我用Visual Studio为例讲步骤,用 Rider的朋友逻辑一样:
打开你的.NET6项目,右键点击项目名称,选“发布”。第一步选“文件夹发布”(别选IIS,直接发布到本地文件夹更稳妥),然后点“下一步”。接下来的配置要注意三点:
选完点“发布”,等个几十秒,发布后的文件会存在binReleasenet6.0publish
文件夹里。把这个publish文件夹里的所有内容复制到服务器的D:MyProjectbackend
目录下(和frontend并列)。别漏文件!比如web.config
(.NET6项目发布后会自动生成,用来配置IIS的ASP.NET Core模块)、YourProject.dll
(项目的主程序集),这些都是必须的——小周之前漏复制web.config,结果后端部署后直接404。
IIS配置:从建站到解决跨域,一步都别乱
前面的准备都做完,终于到IIS配置了——这步没那么复杂,跟着我拆成四步走:
打开IIS管理器(服务器管理器-工具-IIS管理器),右键左侧“网站”,选“添加网站”:
D:MyProject
);点“确定”,站点就建好了。
右键刚创建的应用程序池(比如“MyProject”),选“高级设置”:
小周之前没改“.NET CLR版本”,结果后端部署后直接500错误,查日志提示“无法加载托管代码”,改完就好了。
你的项目根目录是D:MyProject
,里面有frontend(前端)和backend(后端)两个文件夹,得让IIS能访问到:
这样配置后,前端访问路径是http://localhost:8080/frontend
,后端接口路径是http://localhost:8080/backend/api/xxx
。
前端调用后端接口时,浏览器会提示“跨域请求被阻止”——这是浏览器的安全策略,得让后端允许前端的域名访问。有两种方法:
方法一:后端配置CORS(推荐)
打开.NET6项目的Startup.cs
文件,在ConfigureServices
方法里加:
services.AddCors(options =>
{
options.AddPolicy("AllowVue", policy =>
{
policy.WithOrigins("http://localhost:8080/frontend") // 前端的地址
.AllowAnyMethod()
.AllowAnyHeader();
});
});
然后在Configure
方法里加:
app.UseCors("AllowVue");
重新发布后端项目,覆盖服务器上的backend文件夹。
方法二:IIS配置跨域头部(应急用)
如果不想改后端代码,打开后端应用程序的web.config
文件,在system.webServer
节点里加:
这种方法简单,但生产环境不 用——因为Access-Control-Allow-Origin
设为具体域名更安全,别用*
(允许所有域名访问,有安全风险)。
最后:测一遍,确认没问题
全部配置完,打开浏览器访问http://localhost:8080/frontend
,如果能看到Vue的页面,说明前端没问题;再调用一个后端接口(比如http://localhost:8080/backend/api/user
),如果能返回数据,说明后端也没问题。
要是遇到问题,先看这张新手常踩坑表,90%的问题都能解决:
常见问题 | 错误原因 | 解决方法 |
---|---|---|
前端页面空白,F12显示资源404 | Vue打包时publicPath设为“/”,部署到子站点路径错误 | 修改vue.config.js的publicPath为“./”,重新打包 |
后端部署后显示500内部错误 | 未安装ASP.NET Core模块,IIS无法处理.NET6请求 | 下载安装.NET Core Hosting Bundle(包含ASP.NET Core模块) |
前端调用后端接口提示跨域403 | 后端未配置CORS,或IIS未添加跨域头部 | 后端Startup.cs中添加AddCors和UseCors;或IIS Web.config中添加Access-Control-Allow-Origin头部 |
IIS访问后端接口提示404 | 后端应用程序池的.NET CLR版本没设为“无托管代码” | 修改应用程序池的.NET CLR版本为“无托管代码” |
我当初帮小周部署完,他盯着成功加载的页面说:“原来这么简单?我之前怎么没想到拆步骤?”其实不是难,是没人把“为什么要做”讲清楚——比如改publicPath不是“规定”,是因为路径逻辑;设“无托管代码”不是“玄学”,是因为.NET6的运行机制。你按上面的步骤试一遍,要是遇到问题,评论区留个言,我帮你看看——毕竟踩过的坑多了,解决起来也快~
怎么确认服务器上装对了.NET6运行时?
打开服务器的命令提示符,输入dotnet info,如果能看到“.NET Runtime 6.x”的版本,说明装对了;要是提示“dotnet不是内部或外部命令”,就得去微软官网下载.NET6 Runtime(https://dotnet.microsoft.com/zh-cn/download/dotnet/6.0nofollow),双击安装一路下一步就行——记住要装运行时,不是开发用的SDK,运行时更小更适合服务器环境。
Vue项目打包后页面空白,F12显示资源404怎么办?
大概率是打包时publicPath配置错了。你打开Vue项目的vue.config.js文件(没有就自己建一个),把默认的publicPath: “/”改成publicPath: “./”,然后重新运行npm run build打包。因为“/”是根目录路径,要是项目部署在IIS的子站点(比如http://localhost/myproject),浏览器会去根目录找js、css资源,自然找不到;改成“./”就是当前文件夹下的资源,不管部署到哪个目录都能正确加载。
后端.NET6项目部署到IIS后显示500内部错误,可能是啥原因?
先检查两个关键项:一是服务器有没有装ASP.NET Core模块——打开IIS管理器,点击左侧服务器名称,再点右侧“模块”,看不到“AspNetCoreModuleV2”的话,就得去下载.NET Core Hosting Bundle(https://dotnet.microsoft.com/zh-cn/download/dotnet-hosting/6.0nofollow),这个包会自动装ASP.NET Core模块和运行时;二是应用程序池配置——右键应用程序池选“高级设置”,把“.NET CLR版本”改成“无托管代码”,.NET6是跨平台的,不需要IIS托管代码,之前帮小周解决时就是这个配置没改,导致一直500错误。
前端调用后端接口提示跨域403,怎么解决?
推荐用后端配置CORS的方法:打开.NET6项目的Startup.cs文件,在ConfigureServices方法里加Cors政策——比如允许前端地址(http://localhost:8080/frontend)的GET、POST请求,然后在Configure方法里加UseCors启用这个政策;要是不想改代码,也能临时在后端的web.config文件里加跨域头部,比如在system.webServer节点下加customHeaders,设置Access-Control-Allow-Origin为前端地址,但生产环境 用第一种,更安全也更灵活。
IIS里的应用程序池要改哪些配置才能跑.NET6项目?
右键应用程序池选“高级设置”,改三个地方就行:一是“启用32位应用程序”设为False,.NET6是64位的,开32位会冲突;二是“托管管道模式”选“集成”,经典模式是老版本IIS用的,现在基本不用;三是“.NET CLR版本”设为“无托管代码”,这是.NET6项目的核心配置,因为.NET6自己有运行时,不需要IIS的CLR托管,没改的话后端会报404或者500错误。