把VS2013写好的代码部署到服务器,核心就一句话:先通过“发布”功能生成可部署文件,再拷贝到服务器IIS目录并配置好环境。对老程序员来说,VS2013的部署逻辑和现在的新版IDE没有本质区别,我见过不少朋友卡在“代码在本机能跑,一上服务器就报错”这个坎上,其实问题大多出在发布配置和环境遗漏上。
VS2013发布网站的基本流程:从本地到服务器的完整动作
不少朋友一听说“部署”就觉得要敲一堆命令,其实VS2013的图形化发布功能已经相当成熟,咱们把整个流程拆开看,每一步都有明确的操作路径。
第一步:检查项目类型并选择发布方式
先确认你的VS2013项目是Web应用程序还是网站项目,这两者的发布方式有细微差别,业内专家指出,绝大多数商业项目用的是Web应用程序,因为编译后只有DLL文件,部署更干净。
- Web应用程序:菜单栏找到“生成”→选择“发布”,这是标准动作
- 网站项目:右键项目名称→“发布网站”,逻辑略有不同但思路一致
点击“发布”后,VS2013会弹出一个配置向导,这里要选好发布方法,常见的有三种:
| 发布方式 | 适用场景 | 关键点 |
|---|---|---|
| 文件系统 | 局域网内网服务器部署 | 直接生成文件夹,拷贝即可 |
| FTP | 远程服务器 | 需服务器开放FTP端口 |
| Web Deploy | IIS 7+服务器 | 需安装Web Deploy工具 |
多数情况下,文件系统方式最稳妥,也最容易排查问题,选这个方式,会让你指定一个本地文件夹路径,VS2013会把所有需要的东西生成到那里。
第二步:配置文件系统的发布参数
选了文件系统后,有个关键设置容易被忽略配置文件,VS2013会让你选择“Release”还是“Debug”配置。
很多新手图省事用Debug发布,结果服务器上性能很差,还偶尔报一些莫名奇妙的错,行业共识认为,指向公网的服务器必须用Release版本,同时勾选“预编译”选项,这样发布出来的DLL才是优化过的代码。
还有“发布前删除现有文件”这个复选框,建议勾上,否则旧文件残留,有时会导致新代码不生效,排查起来能让人抓狂。
第三步:处理web.config的差异问题
这是VS2013部署中最大的坑之一,本地开发时的数据库连接字符串、API地址和服务器上完全不一样,VS2013支持Web.config转换功能,但很多人不会用。
操作路径:右键web.config文件→“添加配置转换”,系统会生成Web.Release.config,在这个文件里,你可以写替换规则,比如把本地的ConnectionString替换成服务器的。
如果不想这么复杂,更直接的办法是:发布完成后,直接在服务器的web.config文件上修改连接字符串,反正文件都生成了,手动改一下也不费事。
VS2013部署到服务器IIS时,环境配置是关键
这一步相当一部分人栽跟头的地方。VS2013默认用的是.NET Framework 4.5版本,服务器IIS需要提前装好对应版本的运行时,缺了它,访问网站直接白屏或报错。
服务器IIS安装和.NET版本对应关系
在服务器上,首先要确保IIS已经装好,Windows Server 2012或2016上,打开“服务器管理器”→“添加角色和功能”,勾选Web服务器(IIS)。
装好IIS后,重点来了:检查.NET Framework 4.5是否注册到IIS,很多服务器默认装的是4.0甚至2.0,VS2013的项目跑不起来就在这里。
打开命令行工具(管理员权限),执行以下命令:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_regiis.exe -i
注意路径里的Framework64和Framework要区分,64位系统优先用前者,执行完后,重启IIS服务(iisreset命令),再去看应用程序池,应该能找到v4.0的选项了。
创建网站并设置应用程序池
在IIS管理器中,右侧“操作”栏点击“添加网站”,这里有三个重点要对应好:
- 网站名称:随意,但建议和项目名称一致,便于区分
- 物理路径:指向你用VS2013发布生成的那个文件夹
- 绑定端口:默认80,如果端口被占则换一个如8080
把VS2013生成的发布文件夹整个拷贝到服务器磁盘上,建议路径不要带中文和空格,比如C:\inetpub\wwwroot\myproject,在IIS里指定物理路径时,直接指向这个目录即可。
应用程序池的设置也很关键:右键你的网站→“管理网站”→“高级设置”,找到“应用程序池”选项,确保选用的是.NET v4.0的池,如果用了Classic .NET AppPool,部分路由会失效,出现404错误。
常见权限问题排查
把代码放服务器跑,还有个高频问题是对文件夹的写权限,VS2013项目如果有日志写入、图片上传功能,IIS的应用程序池账户需要对该目录有写入权限。
- 右键发布的文件夹→“属性”→“安全”→“编辑”
- 添加
IIS_IUSRS用户,并勾选“完全控制”
这是相当一部分部署失败的根源,代码本身没bug,就是权限不够导致运行时异常。
数据库服务和连接字符串的适配
如果你的VS2013项目带SQL Server数据库,那服务器上的工作量比网站本身还大。
服务器数据库的安装和还原
先在服务器上安装SQL Server,版本建议从2008 R2到2014之间,与VS2013时代对应,兼容性没有大问题,安装时记得选择“混合模式”认证,这是给后续用账号密码连接做准备。
本地数据库导出方式:右键数据库→“任务”→“生成脚本”,或者“备份”生成.bak文件,到了服务器上,用SQL Server Management Studio还原或执行脚本。
修改web.config中的连接字符串
这是在服务器上跑通VS2013代码的最后一步,打开发布目录下的web.config,定位到<connectionStrings>节点,把数据源改成服务器名称,账号密码改成SQL Server的登录凭据。
<add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=数据库名;User ID=sa;Password=你的密码;" providerName="System.Data.SqlClient" />
注意Data Source=.;这里的点代表本机,如果数据库在远程,则改为对应IP,改完保存,重启IIS,网站基本就能跑了。
把本地代码放到服务器上,如何验证和排错?
代码放上去了,环境也配好了,但访问域名或IP时出现各种错误页面,这是最常见的后续问题,按优先级,按下面的清单逐一检查。
常见错误清单及对应解法
| 错误现象 | 可能原因 | 解决动作 |
|---|---|---|
| 404 Not Found | 物理路径不对或端口被占 | 检查IIS路径设置,试改端口 |
| 403 Forbidden | 目录浏览权限未开启 | IIS功能里启用目录浏览 |
| 500错误 | .NET版本不匹配 | 重跑aspnet_regiis.exe |
| 数据库连接失败 | 连接字符串或SQL服务未启动 | 检查SQL服务和web.config |
还有一个最容易被忽视的:防火墙端口,服务器防火墙默认只开80端口,如果网站绑定的是8080端口,外网访问会直接超时,需要在防火墙“入站规则”里新增TCP端口规则,把对应的端口放行。
关于内网服务器部署和远程调试
如果是公司内部的服务器部署,通常用内网IP就能访问,不用涉及公网域名,VS2013发布到本地文件夹后,映射一个网络驱动器直接拷贝到服务器是常规做法,本质上就是文件复制操作。
对于远程服务器部署,VS2013也支持“Web Deploy”方式,但配置过程要求服务器端安装Web Deploy 3.5工具,而且权限设置繁琐,不如文件系统+FTP来得直观,对内网服务器部署的场景,直接用文件系统和共享文件夹是效率最高的组合。
站点不用IIS,用命令行运行VS2013项目可不可以?
有些朋友问这个问题,是因为他们用的是控制台应用程序或Windows服务项目,而不是Web项目,这类项目不依赖IIS,直接拷贝编译好的exe和dll文件到服务器,然后通过Windows任务计划程序或NSSM注册成Windows服务来运行。
操作路径:发布时选择“文件系统”,生成Debug或Release文件夹,把整个文件夹拷贝到服务器,在服务器上打开命令提示符,切换到该目录,执行你的项目名.exe,如果代码逻辑里写好服务监听,就能运行起来。
这种方式对服务器环境要求极低,不装IIS也能跑,适合做数据同步、消息队列处理等后台任务类项目。
VS2013引来代码放服务器后,如何更新迭代?
老项目不会一次就改完,后续的升级部署动作同样频繁,这里给一个稳妥的更新流程:
- 在VS2013里修改完代码
- 重新“发布”到相同文件夹
- 用RDP远程桌面连上服务器,停掉IIS网站(或应用池)
- 覆盖根目录文件
- 重启网站(或回收应用池)
这套VS2013发布网站步骤虽然老,但稳,有人用FTP传输覆盖,有人用远程桌面直接复制,都差不多,核心是别在网站运行的时候直接覆盖核心dll文件,容易导致应用程序池崩溃。
Q&A:老项目部署高频疑问
怎么判断VS2013项目是Web Application还是Web Site?
打开项目文件(.csproj或.sln),用记事本查看,如果包含<ProjectTypeGuids>节点且里面有{349c5851-65df-11da-9384-00065b846f21},就是Web Application类型,安装上面的Web应用发布流程走,没有这个节点的就是Web Site类型,右键项目直接点“发布网站”即可。
服务器上没有VS2013开发环境,能部署运行吗?
完全可以,VS2013只是开发工具,服务器只需要.NET Framework 4.5运行时,不需要安装编译器,发布出来的文件夹里包含所有已编译的DLL和视图文件,服务器只要配置好IIS和对应版本运行时就能跑,这也是很多人选择把代码放服务器跑的原因部署物和源码解耦了。
IIS部署完成但登录页总是跳回登录页,是什么原因?
这是老项目典型问题,大概率是ViewState或Session配置的问题,依次检查web.config里<httpCookies httpOnlyCookies="true" requireSSL="true" />,如果requireSSL为true,而服务器没有配置HTTPS证书,登录Cookie无法回传,表现为反复跳回登录页,去掉该属性或用HTTP访问即可,同时确认应用程序池的“加载用户配置文件”选项设为true,这个和临时目录权限相关。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/793608.html


