Windows Server 2012中Web Service编译错误及VBC编译器升级问题
在Windows Server 2012系统上调试Web Service实例时出现BC2001: 找不到指定文件编译错误。已重新下载安装微软官网的IIS Express 10,但问题仍未解决。经测试,该Web Service可在Windows 10上正常运行,Windows 10上的IIS Express版本为10.0.25095.1000,Windows Server 2012上的版本为10.0.15000.1000,怀疑版本差异引发问题。当前使用的VBC编译器仅支持Visual Basic 2012,询问是否有升级该编译器的方法。
错误详情
Server Error in '/' Application. Compilation Error Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately. Compiler Error Message: BC2001: file 'em.Configuration,System.Text,System.Text.RegularExpressions,System.Web,System.Web.Caching,System.Web.SessionState,System.Web.Security,System.Web.Profile,System.Web.UI,System.Web.UI.WebControls,System.Web.UI.WebControls.WebParts,System.Web.UI.HtmlControls' could not be found Source Error: [No relevant source lines] Source File: vbc : Command line Line: 0
编译器版本信息
Microsoft (R) Visual Basic Compiler version 14.8.3761 for Visual Basic 2012
Copyright (c) Microsoft Corporation. All rights reserved.该编译器作为Microsoft (R) .NET Framework的一部分提供,但仅支持最高Visual Basic 2012版本,这已不是最新版本。如需支持更高版本Visual Basic编程语言的编译器,可通过微软官方渠道获取。
最终错误
vbc : Command line error BC2001 : file 'em.Configuration,System.Text,System.Text.RegularExpressions,System.Web,System.Web.Caching,System.Web.SessionState,System.Web.Security,System.Web.Profile,System.Web.UI,System.Web.UI.WebControls,System.Web.UI.WebControls.WebParts,System.Web.UI.HtmlControls' could not be found
解决方案
1. 修复BC2001错误的直接排查
从错误信息看,编译器查找的文件名包含em.Configuration,这大概率是拼写错误,正确的程序集名称应为System.Configuration。检查Web项目的web.config文件中<compilation>节点下的assemblies配置项,确认是否存在拼写错误的程序集引用,修正后重新编译测试。
2. 升级VBC编译器的可行方式
- 安装Visual Studio Build Tools:下载安装对应版本的Visual Studio Build Tools(如2022版),安装时勾选“.NET桌面构建工具”及Visual Basic相关组件。安装完成后,新版VBC编译器会加入系统路径,自动替代旧版本。
- 部署Roslyn编译器到项目:Roslyn是微软新一代.NET编译器平台,支持最新Visual Basic版本。通过NuGet安装
Microsoft.CodeDom.Providers.DotNetCompilerPlatform包,配置项目使用Roslyn编译,无需升级系统级编译器。 - 升级.NET Framework到4.8:Windows Server 2012支持最高.NET Framework 4.8,升级后系统自带的VBC编译器版本会提升,支持更高版本的VB语法(但更新程度不如Roslyn)。
3. 统一IIS Express版本
若确认版本差异是诱因,可尝试将Windows Server 2012上的IIS Express升级到与Windows 10一致的版本:
- 从微软官网下载兼容Windows Server 2012的IIS Express 10最新安装包,卸载旧版本后重新安装。
- 在Web项目属性中指定IIS Express的安装路径及版本,确保调试时使用新版。
内容的提问来源于stack exchange,提问作者want_to_be_calm

