无法从app_code访问类

时间:2014-09-02 13:04:04

标签: c# asp.net web-site-project app-code

我有一个网站(不是网络应用),其中包含default.aspxdefault.aspx.cs。 它有一个App_Code文件夹,其中包含类A。 所以default.aspx.cs。看起来像:

namespace test1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }
    }
}

班级A

namespace test1
{
    public class A
    {
        _Default mDefaultRef;
        public pageLogicIndividual(_Default defaultRef)
        {
            mDefaultRef = defaultRef;
        }
    }
}

我可以在A中使用_Default。例如。如果我在课程test1.中输入_Default时,IntelliSense将显示这两个类。 但是,如果我在课程test1.中输入A时,智能感知将仅显示A。 为什么我不能在_Default使用A

  

错误:名称空间中不存在类型或命名空间名称   (你错过了一个装配参考)

编辑: 我试着澄清一下。 在.cs_Default所在的test1.文件中工作时,我可以键入_Default,这是命名空间,智能感知将显示类A和类{{1} }。 但是,如果我在.cs文件中工作,A类位于test1.并输入A,这就是命名空间,那么intellisense只会向我显示类{{1}}

3 个答案:

答案 0 :(得分:3)

过去我遇到了这个挑战。

在Visual Studio中打开App_Code文件夹节点。 右键单击相关的类,然后单击属性

在属性窗格中,将Build Action更改为Compile。

它现在应该可以正常工作。

答案 1 :(得分:2)

由于 ASP.NET网站没有名称空间,因此您在创建新文件后自行添加了误导性namespace的问题。名称空间在 Web应用程序项目中可用。即,在创建新的WebSite之后,名称空间不会添加到文件中。

因此,您不需要将班级A放在test1命名空间内,因为即使没有命名空间,您也可以在A中使用default.aspx.cs,但您无法从Webform页面或App_Code访问其他WebForm页面类。

顺便说一句,如果您想在Default Web表单的类中使用必要且可重用的方法,可以将这些方法移到A下的App_Code类中我已经说过你可以在所有Web Form CodeFiles中使用它而不为它提供命名空间。

答案 2 :(得分:1)

简而言之,您无法从App_code类访问页面类 此限制来自website project编译模型。特殊App_code文件夹包含可用于页面(以及彼此)的共享类(以及可能的其他资源)。在编译期间,App_code首先在单个程序集中编译。这是关键点。页面,控件和MasterPages在另一个程序集中编译,这些程序集可能引用App_code程序集(但反之亦然)。所以这是单向的道路 没有namespace声明应该绕过这种行为 页面可以在ASP命名空间(ASP.default_aspx)中看到对方,但页面通常没有公共属性/方法(用户控件.ascx通常有)。
在MSDN Code-Behind Pages

上阅读更好的解释