C# 从App_代码文件夹中找不到类型或命名空间

C# 从App_代码文件夹中找不到类型或命名空间,c#,asp.net,C#,Asp.net,我在项目的App_code文件夹中编写了一个名为ArchivedFilesWrapper的类,但是当我在另一个文件夹中的另一个文件中使用该类时,我发现错误: 找不到类型或命名空间名称“ArchivedFilesWrapper”(是否缺少using指令或程序集引用?) 我认为每个页面都应该能够找到包含在同一个项目中的类,但我想情况并非如此。有人能告诉我我需要什么样的使用声明吗 以下是我的课堂上的一个片段: using System; using System.Collections.Generic

我在项目的App_code文件夹中编写了一个名为ArchivedFilesWrapper的类,但是当我在另一个文件夹中的另一个文件中使用该类时,我发现错误:

找不到类型或命名空间名称“ArchivedFilesWrapper”(是否缺少using指令或程序集引用?)

我认为每个页面都应该能够找到包含在同一个项目中的类,但我想情况并非如此。有人能告诉我我需要什么样的使用声明吗

以下是我的课堂上的一个片段:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace EMCWebAdmin.App_Code
{
    public class ArchivedFilesWrapper
    {
您需要添加

using EMCWebAdmin.App_Code;
您希望能够使用该类的所有页面

或者,将类所在的名称空间更改为所有网页使用的名称空间,假定该名称空间为EMCWebAdmin

然后在你的课堂上改变

namespace EMCWebAdmin.App_Code
    {
...


这是visual studio的一项功能,如果您在文件夹结构中创建类,它将使用文件夹结构后面的命名空间。

如果您将其转换为web应用程序,它应该可以工作。缺点是,每次您更改应用程序并启动应用程序时,它将不再在app_code文件夹中自动生成代码。我从未见过专业的开发者使用网站项目。我不知道MS创建Calss时的目标用户是谁。

是的,将Calss放在另一个文件夹(不是asp.net特殊文件夹)中,仅使用应用程序的主命名空间即可解决此问题。
感谢johnmcp。

也许可以通过将*.cs源文件的构建操作属性更改为编译内容来解决问题。在解决方案资源管理器中,右键单击源文件并选择“属性”

请注意,应用程序代码文件夹用于网站项目

请注意,对于Web应用程序项目MVC项目,将应用程序代码文件夹添加到项目中并将*.cs文件放入其中会导致问题。我无意中从解决方案资源管理器向我的MVC项目添加了一个App\u Code文件夹。VS默认将名称空间设置为MyProjectName.App_代码。在本例中,Visual Studio 2012将生成操作默认为内容,即使类型为.cs代码。在我将*.cs源文件的构建操作属性内容更改为编译后,命名空间在项目的其他文件夹位置解析。但是由于问题,我不得不更改文件夹的名称——请参见下文

重要


在MVC或Web应用程序项目中,App_Code文件夹很麻烦,因为它具有网站项目类型语义。此文件夹在发布(部署)到服务器时编译。通过将构建操作从内容更改为编译,您可以通过强制立即编译来解决开发环境中的命名空间问题,但当第二次编译导致部署时两次定义的
对象出现错误时,您会遇到麻烦。将代码文件放在具有不同名称的文件夹中。如果您将一个网站转换为一个Web应用程序,请参阅网上的相关指南——不在本问题的范围内。要阅读更多关于不同项目类型中的App_Code文件夹的信息,我认为这实际上是我需要做的,但当我这样做时,我现在得到了错误“类型或名称空间名称'App_Code'在名称空间'EMCWebAdmin'中不存在”(是否缺少程序集引用?)您使用的是网站项目还是web应用程序项目。如果您将其转换为web应用程序,它应该可以工作。缺点是,每次您更改应用程序并启动应用程序时,它将不再在app_code文件夹中自动生成代码。我从未见过专业的开发者使用网站项目。我不知道MS在创建它们时的目标是谁。我知道了,谢谢。没有汽车我也能活下去。仍然在琢磨VisualStudio的怪癖,这件事让我感到困惑。非常感谢您的帮助。感谢Ben在上面的评论,没有将其转换为web应用程序,是否有解决此问题的方法?比如清晰的解决方案,等等?@AnilSoman,我不知道。转换为web应用程序解决了以下问题:me@johnmcp,你肯定没有太多时间,因为我遇到的大多数开发人员在开始一个web项目时做的第一件事就是选择一个网站,而不是一个web应用程序。此外,基于您提到的原因,IMO网站的好处超过了wep应用程序的好处。自动编译是幸福!多谢各位。我甚至都没想过要看这个。我相信当你像我一样将文件拖放到项目中时就会发生这种情况。它似乎将所有文件(无论扩展名如何)标记为“Content”。通过将文件的“Build Action”属性从“Content”更改为“compile”,您要求编译器在部署之前对其进行编译。这与App_代码文件夹的用途背道而驰。@liaqatali网站项目和Web应用程序(MVC)项目之间的区别是很重要的一点。根据设计,在Web应用程序项目中,应用程序代码目录在解决方案资源管理器中不能作为ASP.NET文件夹类型使用。是,@subsci。WAP和WSP之间有一个基本的区别,但您仍然可以在WAP中添加App_代码文件夹。我想说的一点是,你可以添加这个文件夹,但如果不改变它的性质,你就不能使用它。@liaqatali即使你“改变它的性质”,一个应用程序代码文件夹在WAP中的实用性是有限的——如问题中所述。您可以在项目上随意设置App_代码文件夹,但这样做违背了ASP.NET的设计,而ASP.NET通常不是最佳编程实践。如果您添加了另一条评论,请您分享一下您建议在WAP中使用App_Code文件夹的令人信服的原因。
namespace EMCWebAdmin
    {
...