【问题标题】:Organizing classes into namespace in the App_Code folder not working as expected将类组织到 App_Code 文件夹中的命名空间中未按预期工作
【发布时间】:2009-02-06 14:19:08
【问题描述】:

我为我的 Web 项目创建了几个类,并将它们存储在 App_Code 文件夹中。我不想将所有类存储在顶层(没有命名空间),但想将它们组织到命名空间中。到目前为止,这似乎不可能,因为当我使用“使用 XXXX;”时命名空间声明它仍然无法在我的代码隐藏文件中找到正确的类。我可能做错了什么?

编辑:

例如我有

namespace foo
{
    public class bar
    {
    }
}

然后在我的 default.aspx 页面后面的代码中我有

.
.
.
using foo

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        bar NewBar = new bar();
    }
}

以上对我不起作用,我必须使用

foo.bar NewBar = new foo.bar();

有人知道我做错了什么吗?

编辑: 好的,所以我安装了 Visual Studio 2005 SP 1 并尝试将其转换为 Web 应用程序而不是网站。还是没有运气。

【问题讨论】:

标签: asp.net visual-studio


【解决方案1】:

(我在这里猜)尝试打开文件的属性并将构建操作设置为“编译”。

【讨论】:

    【解决方案2】:

    最简单的解决方案是将类放在类库中,然后从您的网站项目中引用它。

    【讨论】:

    • 不正确。我有一个 web 项目,在 app_code 文件夹中有命名空间的类。
    • 绝对不是这样的。
    • 当我使用 xxxx 时,我可以去上课;然后在我的课堂上我有类似 xxxx newxxxx = new xxxx();那是行不通的。我仍然必须为其添加名称空间才能使其像这样工作 xxxx.xxxx newxxxx = new xxxx();行得通。
    【解决方案3】:

    你放了吗

    namespace blah
    {
       ...
    }
    

    在代码文件中?

    【讨论】:

      【解决方案4】:

      您使用的是网站项目,而不是 Web 应用程序项目。网站项目即时编译所有 .cs 文件(包括 App_Code 中的文件),以便您可以在 Web 服务器上更新它们,而无需重新编译它们。它们被编译成临时 dll,在正常情况下,这些对您来说是不可见的(即 bin 中没有任何内容)。正如您所发现的,在编写网站项目时,您几乎无法控制名称空间。如果您希望更好的结构化代码和对命名空间的更多控制,那么convert it to a Web Application Project。您的服务器端代码将被编译成 dll 并放置在 bin 文件夹中。

      【讨论】:

        【解决方案5】:

        我想通了。我真的很愚蠢。很抱歉让您担心。这是因为我的命名空间和类名相同,所以它无法区分并需要完全限定名。一旦我更改了类名,一切都按预期工作。

        【讨论】:

          【解决方案6】:

          您是否尝试过首先构建项目,然后尝试“使用”它们?

          【讨论】:

          • 我并没有真正意识到他们必须先构建。对于没有任何命名空间的其他类,它们可以立即使用。只有当我尝试将它们组织到命名空间中时。
          【解决方案7】:

          我刚刚在 VS2005 中尝试了您的确切代码示例,它使用 using 指令按预期工作,无需先构建网站或其他任何东西。

          这告诉我您的项目和/或命名空间还有其他问题。如果您右键单击并选择“构建网站”,它会构建吗?

          当你说它不起作用时,它到底是在什么方面不起作用?网站不建吗?没有智能感知完成?浏览页面时出现错误消息?

          【讨论】:

          • 我现在无法测试。正如一些海报所建议的那样,我刚刚开始安装 VS 2005 sp1 以获得 Web 应用程序支持。当我一天它不起作用时,我的意思是智能感知首先启动命名空间,然后启动类。尽管我已经使用了。如果我强制编译 => 编译器错误
          【解决方案8】:

          右键单击“类”并选择->“属性”将“属性”更改为->编译并 在 .aspx 上“写命名空间名称”

           using namespace name of the class;
          

          效果很好。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-02-10
            • 1970-01-01
            • 2011-07-20
            • 1970-01-01
            • 1970-01-01
            • 2017-09-08
            • 1970-01-01
            • 2017-05-24
            相关资源
            最近更新 更多