ASP.NET 间歇性地获取编译器错误消息

ASP.NET Getting compiler error message intermittently

我有一个仅使用内联 C# 的 aspx 页面,没有代码隐藏。
运行 来自 Visual Studio 它有效,但是将 aspx 文件添加到我本地计算机的 wwwroot 会给出消息

Compiler Error Message: CS1513: } expected

如果我重新安排代码以在代码上方使用方法,则消息改为

CS1519: Invalid token 'try' in class, struct, or interface member declaration

我想这与服务器配置有关,但我真的不知道从哪里开始。

只有在有方法时才会出现此问题,从下面删除 method1 会得到正确的 运行。

这是我能够导致错误的最小完整文件

html

<%@ Page Language="C#" %>
<%
    try
    {
        string message = "Text";
        Response.Write(method1(message));
    }
    catch
    {
        Response.Write("Err");
    }

    string method1(string source)
    {
        return source;
    }
%>

如果您直接在 aspx 页面上嵌入代码,该代码仍然必须放在方法中。例如:

<%@ Page Language="C#" %>
<%
    void Page_Load(Object sender, EventArgs e)
    {
        try
        {
            string message = "Text";
            Response.Write(method1(message));
        }
        catch
        {
            Response.Write("Err");
        }
    }

    string method1(string source)
    {
        return source;
    }
%>

顺便说一句 - 我们通常不会将 C# 代码直接放在 .aspx 文件中。这就是 code behind 系统的用途。

而且我们通常不会直接写回复。很难控制标记的最终位置。在 Web 窗体中,最好在页面上声明一个控件,然后向该控件(或 show/hide 控件)添加标记。当然,如果我们要谈论把事情做好——那么一开始就不要使用 Web Forms。这是一项死技术。

我搞砸了 Visual Studio 项目,运行 在较早版本的 .NET/C# 上产生了以下错误,看来这可能是我的实际问题有过

Error CS8059 Feature 'local functions' is not available in C# 6. Please use language version 7.0 or greater.

我不确定为什么它认为 method1 是一个本地函数并且很难获得详细信息。

编辑:为了解决我的问题,我将方法放在脚本标签中而不是嵌入代码块中。然后可以从嵌入块和脚本标记中使用这些方法。

<script runat="server">
    string method1(string source)
    {
        return source;
    }
<script>