在本地工作正常,但在服务器上会导致“需要表达式”的错误

4

这不是上述链接问题的重复-我完全意识到两个代码块之间的区别,只需阅读问题的第一行即可!

(如果“此问题可能已有答案:”仍在上方显示,则只有这样才有意义)


我最近发现了<%: %>内联代码块(自动进行Server.HtmlEncode输出),以及数据绑定版本的<%#: %>

我有一个包含几个<%#: %>块的<asp:Repeater>, 它在我的开发机器上运行正常,但是在服务器上发布时出现以下错误:

BC30201:需要表达式。

如果我将所有实例<%#:...%>转换为<%#Server.HtmlEncode(...)%>, 则代码可以正确工作。

在服务器上使用<%: %>中的代码,可以正常工作。

IIS中的应用程序池(我的本地机器和服务器都是如此)设置为使用.NET4.0。

是否有任何明显的原因会导致服务器上出现错误?


更新

感谢@vcsjones,他们正确指出我在本地机器上安装了.Net 4.5(我肯定不是这种情况)。

他们提供的链接可以查看这种情况。


@user2864740,我刚刚更新了我的问题,因为<%: %>确实有效,这表明它正在运行.NET 4.0,不是吗? - freefaller
2
我怀疑未安装.NET Framework 4.5。此功能是在ASP.NET 4.5中引入的,而不是4.0。<%: %>自4.0以来就存在,但<%#: %>是在4.5中添加的。 - vcsjones
谢谢 @vcsjones,但是我在本地开发机和服务器上都没有安装4.5...那为什么在我本地的开发机器上可以工作呢? - freefaller
您也可以访问:http://weblogs.asp.net/scottgu/archive/2010/04/06/new-lt-gt-syntax-for-html-encoding-output-in-asp-net-4-and-asp-net-mvc-2.aspx。 - Dalorzo
1
@freefaller .NET 4.5安装在v4.0目录中,请查看此MSDN帖子以确定您安装了哪个.NET版本。基本上,查看此注册表键:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full,如果存在Release值,则已安装4.5。 - vcsjones
显示剩余6条评论
1个回答

4
这是因为ASP.NET 4.5已经在本地安装,而没有在服务器上安装。 <%#:绑定语法是在ASP.NET 4.5中introduced的。 <%:<%#语法在4.5之前就存在,所以它们也可以在远程工作。
.NET Framework 4.5是4.0的“插件”替代品,因此即使您的项目专门针对.NET 4.0,如果已安装4.5解析器,则仍将使用它,这在本地发生了。

再次感谢@vcsjones。你一定会喜欢微软的这种思维方式:“所以,我们有一个独立的目录结构用于v2、v3和v3.5,这是有用和安全的...但是让我们不要费心将v4.0和v4.5分开,而是把它们全部混在一起!”天才! - freefaller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接