完整错误是 - “值不能为空。参数名称:virtualPath”。这发生在我们的QA和培训环境(Win 2003 Server& IIS6)中,但当然无法在调试器中进行重新创建。更糟糕的是,尽管有一个合理的全局错误处理程序,但没有堆栈跟踪伴随错误,并且没有任何内容写入事件日志。该应用程序是一个在2.0 Framework下运行的大型全球化Asp.Net(VB)Web应用程序。它使用通常的“App_LocalResources”结构来获取resx文件,并且迄今为止表现相当不错。应用程序中有几个地方使用了这样的代码:
Dim x As New Compilation.ExpressionBuilderContext(Control.TemplateControl)
Dim path As String = x.VirtualPath
Dim res As String = HttpContext.GetLocalResourceObject(path, resourceKey).ToString
然而,当我强制“path”变量为空时,围绕此代码的Try / Catch块正常工作。我们还在数据网格列标题处使用此语法:
<asp:TemplateColumn HeaderText="<%$ Resources:resHeader %>" >
我们还使用了大量的Ajax,并不断地将ascx控件动态加载到占位符中。如果有人对此有任何见解,我将非常感谢您的帮助。
谢谢,拉里
答案 0 :(得分:1)
跟进 - 确保您的服务器达到适当的补丁级别 其根本原因是3个QA虚拟机没有 2.0 .Net Framework SP1已安装。
答案 1 :(得分:0)
如果您复制并粘贴了错误,我会注意到它显示为“virtualPath”(小写v);在示例代码中,您使用的属性具有VirtualPath(大写V)。
另外,你得到的实际例外是什么?一个NullReferenceException?