Windows Server 2008 R2 IIS7.5中资源键'GoToLastExistingData'缺失问题求助
你碰到的这个The resource object with key 'GoToLastExistingData' was not found错误挺常见的,虽然资源键确实存在且之前部署正常,但在Windows Server 2008 R2的IIS7.5环境下,大概率是部署细节或者IIS配置的小疏漏导致的。我给你梳理几个针对性的排查和解决方向:
检查App_GlobalResources的部署完整性
先确认服务器上网站根目录的App_GlobalResources文件夹里,Strings.resx(以及对应的语言版本文件)是否完整上传,没有遗漏或损坏。可以对比本地和服务器文件的大小、修改时间,避免部署工具跳过文件。另外,本地项目里要确保resx文件的生成操作是Embedded Resource(右键文件→属性查看),这个设置错了会直接导致资源无法被读取。验证应用程序池配置
Windows Server 2008 R2的IIS7.5对.NET版本和权限很敏感:- 确认网站对应的应用程序池,.NET框架版本和你本地开发环境一致(比如.NET 4.0/3.5),版本不匹配会引发资源加载异常;
- 尝试回收应用程序池:IIS管理器→应用程序池→选中目标池→右键“回收”,有时候IIS缓存了旧资源信息,回收后会重新加载最新文件。
检查资源文件的命名与权限
- 确认
Strings.resx文件名拼写(包括大小写)和代码里的Strings完全一致,虽然Windows不区分大小写,但IIS某些配置下可能对资源文件名大小写敏感; - 给
App_GlobalResources文件夹和resx文件设置正确权限:右键文件夹→属性→安全→添加应用程序池身份(比如IIS AppPool\你的池名称),赋予读取权限,权限不足会导致IIS无法读取资源文件。
- 确认
重新编译部署
试试本地清理解决方案(右键解决方案→清理),再重新生成(右键解决方案→生成),然后重新打包部署到服务器。有时候编译过程中资源文件没有正确嵌入到部署包,重新编译能解决这个问题。临时调试验证
如果前面的方法都没效果,你可以在服务器上的网站加个测试页面,手动读取资源键:protected void Page_Load(object sender, EventArgs e) { string testResource = Resources.Strings.GoToLastExistingData; Response.Write("资源值:" + testResource); }访问这个页面,如果能输出正确值,说明资源本身没问题,可能是.aspx页面的绑定语法有小问题;如果还是报错,就回到前面的步骤重点排查资源加载环节。
内容的提问来源于stack exchange,提问作者Daniel

