编译器期望关闭支架而不打开支架

时间:2016-05-24 10:12:15

标签: c# asp.net

通过trying to implement authentication in CKFinder跟随this "howto",我已写入以下文件,保存到我的CKFinder目录:

<%@page codepage="65001" language="C#" lcid="6153"%>
<%
using CKSource.CKFinder.Connector.Core;
using CKSource.CKFinder.Connector.Core.Authentication;
public class MyAuthenticator:IAuthenticator{
    public Task<IUser> AuthenticateAsync(ICommandRequest commandRequest,CancellationToken cancellationToken){
        return Task.FromResult((IUser)new User(true,"editor"));
    }
}
%>

但是,当我尝试加载它时,我在包含第二个CS1513语句的行上得到编译器错误(using),声明结束括号(})是尽管事实上在该行之前的文件中没有任何左括号({)这一事实。

鉴于我几乎不了解ASP.NET,有人可以了解一下这里发生了什么以及我将如何解决它?

虽然我知道它不会起作用,但我尝试在该行的末尾添加一个}以查看会发生什么,并抛出不同的编译器错误 - &#34; {{1预期的类,委托,枚举,接口或结构&#34; - 在完全不同的文件中&#34; App_Web_auth.aspx。*。*。0.cs&#34; (星号是每次重载时随机字符串的字符串),奇怪的是,它嵌套在我的CS1518中的几个目录中。该错误发生在第214行,这是以下摘录中的第二行:

%WINDIR%

更新1

如果我完全删除了公共类,我又得到了另一个编译错误 - &#34; [System.Diagnostics.DebuggerNonUserCodeAttribute()] protected override void FrameworkInitialize() { base.FrameworkInitialize(); this.@__BuildControlTree(this); this.AddWrappedFileDependencies(global::ASP.auth_aspx.@__fileDependencies); this.Request.ValidateInput(); } 语法错误,&#39;(&#39;期待&#34; - 这一次在包含第一个CS1003:语句。试验和错误使我发现using语句需要包含在parnetheses中,但是在重新添加公共类之后,我仍然得到关于缺失的原始错误using

}

再次删除该类会导致另一个新错误 - &#34; <%@page codepage="65001" language="C#" lcid="6153"%> <% using(CKSource.CKFinder.Connector.Core); using(CKSource.CKFinder.Connector.Core.Authentication); public class MyAuthenticator:IAuthenticator{ public Task<IUser> AuthenticateAsync(ICommandRequest commandRequest,CancellationToken cancellationToken){ return Task.FromResult((IUser)new User(true,"editor")); } } %> :&#39; CKSource.CKFinder.Connector.Core&#39;是一个&#39;名称空间&#39;,它在给定的上下文中无效&#34;

更新2

根据SeM&#39; suggestion,我将以下内容添加到CKF&#34; Web.config&#34;的CS0119部分。文件:

system.web

并将我文件的内容更新为:

<pages>
    <namespaces>
        <add namespace="CKSource.CKFinder.Connector.Core" />
        <add namespace="CKSource.CKFinder.Connector.Core.Authentication" />
    </namespaces>
</pages>

然而,这导致原始错误(&#34; <%@page codepage="65001" language="C#" lcid="6153"%> <%@import namespace="ConnectorBuilder.SetAuthenticator"%> <% public class MyAuthenticator:IAuthenticator{ public Task<IUser> AuthenticateAsync(ICommandRequest commandRequest,CancellationToken cancellationToken){ return Task.FromResult((IUser)new User(true,"editor")); } } %> :}预期&#34;)现在被抛出在{{{{{{ 1}} - 添加了该文件内容的奇怪性,不知何故发生了变化。

CS1513

更新3

更改我的文件以使用%WINDIR%标记:

private void @__Render__control1(System.Web.UI.HtmlTextWriter @__w, System.Web.UI.Control parameterContainer) {

    #line 3 "x:\redacted\path\to\myfile.aspx"

public class MyAuthenticator:IAuthenticator{
    public Task<IUser> AuthenticateAsync(ICommandRequest commandRequest,CancellationToken cancellationToken){
        return Task.FromResult((IUser)new User(true,"editor"));
    }
}


    #line default
    #line hidden
}

在第2行引发了一个全新的错误:&#34; script:类型或命名空间名称&#39; ConnectorBuilder&#39;找不到(你错过了使用指令或汇编引用吗?)&#34;

更新4

我删除了<%@page codepage="65001" language="c#" lcid="6153"%> <%@import namespace="ConnectorBuilder.SetAuthenticator"%> <script language="c#" runat="server"> public class MyAuthenticator:IAuthenticator{ public Task<IUser> AuthenticateAsync(ICommandRequest commandRequest,CancellationToken cancellationToken){ return Task.FromResult((IUser)new User(true,"editor")); } } </script> 指令,并在声明公共任务的行上收到以下错误:&#34; CS0246:类型或命名空间名称&#39; CancellationToken&#39;找不到(你错过了使用指令或汇编引用吗?)&#34;。

2 个答案:

答案 0 :(得分:1)

试试这个:

ASPX

<%@page codepage="65001" language="C#" lcid="6153"%>
<%@ Import namespace="YourProgram.YourNamespace" %>
<%
public class MyAuthenticator:IAuthenticator{
    public Task<IUser> AuthenticateAsync(ICommandRequest commandRequest,CancellationToken cancellationToken){
        return Task.FromResult((IUser)new User(true,"editor"));
    }
}
%>

的web.config

<system.web>    
<pages>
   <namespaces>
      <add namespace="CKSource.CKFinder.Connector.Core" />
      <add namespace="CKSource.CKFinder.Connector.Core.Authentication" />
   </namespaces>
</pages>

更新

请在aspx页面上尝试此操作:

<%@page codepage="65001" language="C#" lcid="6153"%>
<%@ Import namespace="ConnectorBuilder.SetAuthenticator" %>
<script language="c#" runat="server">
    public class MyAuthenticator:IAuthenticator
    {
        public Task<IUser> AuthenticateAsync(ICommandRequest commandRequest,CancellationToken cancellationToken)
        {
            return Task.FromResult((IUser)new User(true,"editor"));
        }
    }
</script>

答案 1 :(得分:0)

经过一番荒谬的审判和审判后错误,我设法解决问题,但我仍然不知道原因或修复是什么或为什么这个代码工作,但文档中提供的代码不是。我设法弄清楚的一件事是,我所解释的与我的用例无关的文档中的三个using语句实际上是相关的。我的文件现在看起来像这样:

<%@page codepage="65001" debug="true" lcid="6153"%>
<%@import namespace="System.Linq"%>
<%@import namespace="System.Threading"%>
<%@import namespace="System.Threading.Tasks"%>
<%@import namespace="CKSource.CKFinder.Connector.Core"%>
<%@import namespace="CKSource.CKFinder.Connector.Core.Authentication"%>
<script language="c#" runat="server">
public class MyAuthenticator:IAuthenticator{
    public Task<IUser> AuthenticateAsync(ICommandRequest commandRequest,CancellationToken cancellationToken){
        return Task.FromResult((IUser)new User(true,"editor"));
    }
}
</script>

它仍然会抛出与传递给"editor"函数的User字符串相关的错误,但这与此处提出的问题无关。