把VS2017做好的工程上传到服务器,最省心的路径是:用Git做版本管理推送到服务器,或者用VS2017自带的发布功能配合Web Deploy直接部署;选哪条路,取决于你的服务器是Linux还是Windows,以及你习惯用命令行还是图形界面。
很多人在VS2017里把代码跑通之后,卡在“上传”这一步,这里说的“上传”其实分两种:一种是把源代码传到服务器上,比如Git仓库或文件目录;另一种是把编译好的网站文件发布到服务器上,让它能通过域名访问,下面把两条路都讲透。
先搞清楚你的服务器和上传场景
动手之前,先花一分钟确认三件事,能省掉后面好几个小时的折腾。
- 服务器操作系统:Linux服务器(比如CentOS、Ubuntu)和Windows Server的操作方式完全不同,Linux上多用命令行和SSH,Windows Server上可以直接用远程桌面配合IIS。
- 上传目的:是传给队友看源码,还是部署成线上网站?前者用Git仓库就够了,后者需要走发布流程。
- 工程类型:ASP.NET Web应用、控制台程序、还是类库?Web应用要关注发布配置,控制台程序拷过去就能跑。
业内专家指出,绝大多数VS2017上传服务器失败的情况,都是因为没区分“源码上传”和“发布部署”这两个动作。
用Git把工程推送到服务器
Git是目前最主流的方式,尤其是你的服务器是Linux,或者团队协作需要版本管理时,这是首选。
在服务器上建一个裸仓库
先通过SSH登录服务器,装好Git之后,在服务器上建一个裸仓库(bare repository),它专门用来接收推送,不直接存放工作文件。
mkdir /var/repos/myproject.git cd /var/repos/myproject.git git init --bare
本地VS2017工程关联远程仓库
在本地工程文件夹里打开Git Bash,依次执行:
git init git add . git commit -m "首次提交" git remote add origin root@你的服务器IP:/var/repos/myproject.git git push -u origin master
输入服务器密码后,源码就推上去了,之后每次改完代码,git add .、git commit、git push三步走,服务器上的代码永远是最新版。
在服务器上拉取到工作目录
裸仓库里的代码不能直接运行,需要在网站根目录(比如/var/www/html)克隆一份工作副本:
cd /var/www/html git clone /var/repos/myproject.git
以后每次push完,去服务器上执行git pull就能同步,行业共识认为,这种方式比FTP传文件靠谱得多,因为每次改动都有记录,出了问题能回滚。
VS2017发布功能直接部署到服务器
如果你不想碰命令行,或者服务器是Windows Server + IIS,那VS2017自带的发布功能更顺手。
创建发布配置文件
在VS2017里右键点击项目,选择“发布”,弹出发布向导。
- 发布目标选“IIS、FTP等”
- 连接方式选“Web Deploy”或“FTP”
- 服务器地址填你的域名或IP
- 站点名称填IIS里建好的网站名
- 用户名密码填服务器管理账号
填好后点“验证连接”,显示绿色勾就说明通了,最后点“发布”,VS2017会自动把编译后的文件传输到服务器指定目录,整个过程有进度条,比手拖FTP直观得多。
常见坑:Web Deploy没装
Windows Server上如果提示“无法连接到远程服务器”,八成是没装Web Deploy组件,去服务器上打开IIS管理器,在“管理服务”里确认“管理服务的委派”功能是否开启,或者直接在服务器上安装Web Deploy 3.6,装完重启IIS,再回VS2017重新验证连接,大多数情况下能解决。
FTP上传,最传统也最直接
如果你的服务器只是临时用,或者别人已经给了你FTP账号,那直接用FileZilla这类工具拖拽即可。
用VS2017自带FTP工具
其实VS2017的发布向导里也能选FTP,填好主机、端口、目录、账号密码,点发布就行,这种方式适合小项目,或者你不需要频繁更新代码的场合。
一个要命的细节:目录权限
FTP传上去的文件经常出现“访问权限不足”的报错,尤其是Linux服务器,上传后用SSH执行:
chown -R www:www /var/www/html chmod -R 755 /var/www/html
把文件属主改成Web运行用户(通常是www或nginx),才能正常读取。
四种上传方式怎么选:对比清单
| 方式 | 适用场景 | 学习成本 | 更新效率 | 回滚能力 |
|---|---|---|---|---|
| Git推送 | 团队协作、Linux服务器 | 中 | 高 | 强 |
| VS2017发布(Web Deploy) | Windows Server + IIS | 低 | 高 | 中 |
| FTP | 临时传输、小项目 | 极低 | 低 | 无 |
| SCP/rsync | Linux服务器、命令行爱好者 | 中 | 中 | 无 |
如果你是个人开发者,服务器是Linux,想省事又想要版本管理,Git是综合体验最好的,如果你面对的是Windows Server,或者公司运维只开了FTP端口,那就用VS2017发布功能或FTP。
上传前后的配置和检查清单
无论用哪种方式,上传完成后都要做这几步验证,否则网站大概率打不开。
- 数据库连接字符串:VS2017里开发时用的连接字符串多半指向本地数据库,上传前记得改成服务器上的数据库地址、账号、密码,这个文件通常在
Web.config里,改完再发布。 - 端口是否放行:服务器防火墙或安全组规则里,要放行80端口(HTTP)或443端口(HTTPS),很多情况下代码没问题,就是端口没开。
- 静态文件路径:如果你上传的是编译后的网站,确认图片、CSS、JS文件路径都是相对路径,避免因为目录层级不同导致资源404。
- 日志排查:网站打不开时,去服务器上查看事件查看器(Windows)或
/var/log/nginx/error.log(Linux),错误信息会直接告诉你缺什么。
我该选哪种?一个判断口诀
想省事、不折腾命令行,选VS2017发布到服务器;想长期维护、多人协作,选Git推送到服务器;临时应急、一次性上传,选FTP,没有绝对的好坏,只有适不适合你当前的处境。
Q&A:关于VS2017上传服务器的常见疑问
vs2017发布网站到服务器后,页面打不开怎么办?
先确认服务器上的IIS或Nginx是否启动,端口是否放行;再检查发布目录下是否有web.config文件(ASP.NET应用必须有);最后看事件查看器或错误日志,把报错信息粘到搜索引擎里,通常能直接定位问题,确认一下你的VS2017发布时选的框架版本和服务器上安装的.NET运行时是否匹配,不匹配的话应用会直接崩掉。
vs2017可以用FTP直接上传工程吗?
可以,在发布向导里选择FTP,填入服务器IP、端口、目录和账号密码就能上传,但要注意,FTP上传的是编译后的文件,不包含源代码工程文件(.sln、.csproj),如果你想备份源码,FTP不适用,FTP没有增量更新功能,每次都是全量传输,文件多的时候比较慢。
用Git上传代码到服务器,怎么避免每次都要输密码?
配置SSH密钥登录,在本地生成密钥对,把公钥追加到服务器的~/.ssh/authorized_keys文件里,之后推送和拉取都不需要密码,具体操作是:本地执行ssh-keygen -t rsa生成密钥,然后用ssh-copy-id root@服务器IP一键部署公钥,配置好之后,git push就能直接推送,体验和GitHub一致。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/602433.html




