尝试从ASP.NET的App_Code文件夹中的另一个类派生时,类型冲突

Mik*_* D. 3 c# asp.net

我有一个实现该IRouteConstraint接口的基类。我正在尝试扩展该类并覆盖Match()基类中定义的方法。这适用于使用Visual Studio 2013 Update 2的ASP.NET MVC5应用程序。

我的课程结构如下:

\ Project \ App_Code \ BaseRouteConstraint.cs:

namespace Website {
    public class BaseRouteConstraint: IRouteConstraint {
        public virtual bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) {
            ...code
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

\ Project \ App_Code \ DerivedRouteConstraint.cs:

namespace Website {
    public class DerivedRouteConstraint: BaseRouteConstraint {
        public override bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection) {
            if(!base.Match(httpContext, route, values, routeDirection) {
                ...code
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我实际上不能使用DerivedRouteConstraint类,因为Visual Studio说它不存在。我也收到此警告:

“ C:\ Project \ App_Code \ BaseRouteConstraint.cs”中的“ Website.BaseRouteConstraint”与“ C:\ Project \”中的导入类型“ Website.BaseRouteConstraint”冲突。使用在'C:\ Project \ App_Code \ BaseRouteConstraint.cs'中定义的类型

我已经检查过,并且没有意外地将基类的源代码文件复制到解决方案中的其他任何地方。

Mik*_* D. 5

我不知道App_Code文件夹不能像普通文件夹那样工作。我以为这只是在项目结构中放置不一定需要它们自己的文件夹的任何半随机类的地方。在写这个问题时,我决定尝试将文件移到另一个(普通)文件夹中,然后一切开始正常运行。

App_Code文件夹具有特殊功能,并且其中的所有内容都将编译为DLL并自动引用到项目。MSDN页面“ 共享代码”上的“应用程序代码”部分提供有关此文件夹的更多信息。该论坛帖子(http://forums.asp.net/t/1026147.aspx?+What+is+App_Code+Folder+for+)暗示我代码实际上已引用回项目,这对于理解该代码很重要错误。

问题的根源是我更改了类所驻留的名称空间,因为我不希望它们位于Website.App_Code名称空间中。因此,当App_Code文件夹中的文件被编译并自动引用到项目时,我WebsiteBaseRouteConstraint类的命名空间中有了两个定义。(一个来自引用App_Code DLL,另一个来自代码本身。)

更改命名空间回到Website.App_Code工作,一旦我也设置为文件上的构建选项Compile,而不是Content(基于这样一个问题:类居住在App_Code文件无法访问)。但是,在这种情况下,我认为将文件移动到项目结构中它们自己的普通文件夹中更为合适。