【问题标题】:asp.NET 2.0 Web Site Can't Access Classes in App_Codeasp.NET 2.0 网站无法访问 App_Code 中的类
【发布时间】:2013-06-01 00:03:48
【问题描述】:

我在将我的网站部署到服务器后访问课程时遇到问题。 请注意,这是一个 Web Site 而不是 Web Application。错误是:

编译器错误消息:CS0246:找不到类型或命名空间名称“Order”(您是否缺少 using 指令或程序集引用?)

版本信息:Microsoft .NET Framework 版本:2.0.50727.1433; ASP.NET 版本:2.0.50727.1433

我在谷歌上搜索了很多,但找不到任何有用的东西。

我的代码看起来像这样(我在声明 Order 的那一行得到编译器错误):

//Default.aspx.cs
namespace Foo
{
    public partial class _Default : System.Web.UI.Page
    {
        private Order custOrder;
        ....etc
    }
}

在 App_Code 文件夹中,我有 Order.cs:

namespace Foo
{
    public class Order
    {
        ....etc
    }
}

奇怪的是,这在本地和开发环境中都可以正常工作。当我将其移至 qa 环境时,就会出现该错误。

我通过将所有代码提交到 subversion 存储库然后在服务器机器上导出来进行部署。

我猜这可能是某种命名空间错误,但我不知道为什么它会在某些机器上运行,而在其他机器上不行。

知道在不同的服务器上可能会导致什么不同吗?所有机器报告 .net 版本为 2.0

【问题讨论】:

    标签: c# asp.net web


    【解决方案1】:

    右键单击 App_Code 中的源文件并将其“构建操作”属性设置为“编译”。

    【讨论】:

    • 这在手动将文件移动到新的 Web 应用程序项目后为我修复了它。 app_code 中每个文件的构建操作属性都设置为 content 而不是 compile。
    • 默认情况下,Visual Studio 2008 在将 CS 文件添加到 App_Code 时将构建操作设置为 Content。默认的构建操作应该是编译。有人会认为添加到 App_Code 的 CS 文件显然意味着您希望它们被编译。
    • 是的,我觉得这很奇怪,尤其是当重用 .cs 文件是一项非常常见的任务时
    • 成功了。当我将文件移动到 Web 项目时,它被设置为内容。我试图让它在最后 20 分钟左右工作。 :)
    • 我在asp.net网站项目中似乎没有这个选项:(
    【解决方案2】:

    正如它所说,错误意味着它找不到该类型。

    可能的原因:

    1. 编译错误导致您的 app_code 文件夹中的 .cs 文件无法编译。当 ASP.NET 查看编译后的代码时,找不到您要查找的类,因此出现错误。

    2. .cs 文件未部署到 app_code。显然,如果源文件不在站点中,则无法编译它们。

    3. 权限问题导致服务器无法加载 .cs 文件。

    4. 您的某个页面错误地引用了该类 - 可能是 .cs 或 .aspx 中的拼写错误、将类移至新命名空间或重命名等。

    基本上,无法找到、访问或编译源。

    【讨论】:

    • 1 和 4 不太可能,因为它可以在另外两台机器上正确编译。我会仔细检查该文件夹是否存在,但我不明白为什么它不会像 aspx 文件那样复制。权限同上。
    • @Tavis 最近有没有出现这个问题?任何服务器配置更改(不太可能但值得询问)?
    • 这是第一次在特定服务器上进行尝试。我最好的猜测是它的配置不正确,但我无权访问它。我所能做的就是请求上传一个文件夹。有点缩小了我的选择范围。我希望有人可能会看到类似的东西。
    • 终于可以访问服务器了。被部署为网站下的文件夹,而不是网站本身。
    • @Tavis 会做到的。网站项目在这方面很挑剔。是否考虑过迁移到 Web 应用程序项目?你的生活会轻松很多。
    【解决方案3】:

    很多时候,在 SVN 中 bin 目录被忽略(有充分的理由),所以最终发生的是本地(调试时)VS 负责为您创建 App_Code.dll。您需要做的是检查 bin 目录是否已部署到您的服务器计算机。如果不是你有很多方法来部署你的解决方案,通过使用部署网站,或 ftp 复制等。

    【讨论】:

    • 我在本地或远程机器上没有 bin 目录。我认为这是因为这是一个网站,而不是 Web 应用程序,所以没有构建步骤。 App_Code 中的文件在运行时编译。也许我在这里弄错了?
    • App_Code 文件夹是否被复制到服务器上?这是我能想到的唯一一件事,为什么您会收到未找到类型的错误。
    【解决方案4】:

    您的 App_Code 文件上的属性 Build Action 是否设置为 Compile ?默认情况下,Web 应用程序项目中没有。

    【讨论】:

      【解决方案5】:

      您是否在 .aspx 文件中部署 .dll?

      【讨论】:

      • 因为这是一个网站,我的印象是 App_Code 中的文件是在运行时编译的,我不需要对 dll 做任何事情。你能澄清一下在我的 .aspx 文件中部署是什么意思吗?
      • 您必须将 .aspx 文件部署到应用程序根目录,并将 .dll 从 bin 目录部署到应用程序根目录的 bin 目录...
      • 参考 Szeliga 的回答,他解释了我的意思
      • 没有 bin 目录。查看 Szeliga 的回答
      猜你喜欢
      • 2014-06-30
      • 2015-10-24
      • 2010-11-16
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-09
      • 1970-01-01
      相关资源
      最近更新 更多