我在项目的App_code文件夹中编写了一个名为ArchivedFilesWrapper的类,但是当我在另一个文件夹中使用此类时,我得到错误:
找不到类型或命名空间名称'ArchivedFilesWrapper'(您是否缺少using指令或程序集引用?)
我认为每个页面都应该能够找到同一项目中包含的类,但我想情况并非如此。有人可以告诉我我需要使用的声明吗?
以下是我班级的摘录:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace EMCWebAdmin.App_Code
{
public class ArchivedFilesWrapper
{
答案 0 :(得分:71)
也许问题可以通过将* .cs源文件的构建操作属性更改为内容中的编译来解决。在Solution Explorer中右键单击源文件,然后选择Property。
请注意, App_Code 文件夹适用于网站项目。
请注意,对于 Web应用程序项目或 MVC 项目,将 App_Code 文件夹添加到项目中并将* .cs文件放入其中会引起问题。我无意中从解决方案资源管理器中将 App_Code 文件夹添加到我的MVC项目中。 VS将名称空间默认为MyProjectName.App_Code。 在这种情况下,即使类型为.cs代码,Visual Studio 2012也默认将构建操作转换为内容。将* .cs源文件的构建操作属性更改为内容中的编译后,命名空间在项目的其他文件夹位置得到解析。但是由于问题,我不得不更改文件夹的名称 - 见下文。
重要强>
在 MVC 或 Web应用程序项目中, App_Code 文件夹出现问题,因为它有网站项目类型语义。发布(部署)到服务器时会编译此文件夹。通过将Build Action从Content更改为Compile,您可以通过强制立即编译来解决开发环境中的命名空间问题,但是当第二次编译导致部署中出现 objects defined twice
错误时,您会遇到麻烦。将代码文件放在具有不同名称的文件夹中。如果您将网站转换为Web应用程序,请参阅网络上的指南 - 不在本问题的范围内。要阅读有关不同项目类型see this blog
答案 1 :(得分:4)
您需要添加
using EMCWebAdmin.App_Code;
到您希望能够使用该课程的所有页面。
或者,您可以将类所在的名称空间更改为所有网页使用的名称空间,假定它是EMCWebAdmin
然后在你的班级改变
namespace EMCWebAdmin.App_Code
{
...
到
namespace EMCWebAdmin
{
...
这是visual studio的一项功能,如果您在文件夹结构中创建一个类,它将使用一个遵循文件夹结构的命名空间。
答案 2 :(得分:2)
如果您将其转换为网络应用程序,它应该工作。缺点是每次更改它并启动应用程序时,它将不再在app_code文件夹中自动生成代码。我从未见过专业开发人员使用网站项目。我不知道MS在创建它们时是谁的目标。
答案 3 :(得分:2)
是的,把calsses放到另一个文件夹(不是asp.net特殊文件夹),并且只使用应用程序的主命名空间来解决这个问题。 谢谢johnmcp。