【问题标题】:Type conflict when trying to derive from another class in the App_Code folder in ASP.NET尝试从 ASP.NET 的 App_Code 文件夹中的另一个类派生时出现类型冲突
【发布时间】:2014-10-14 04:15:39
【问题描述】:

我有一个实现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
        }
    }
}

\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
            }
        }
    }
}

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

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

我已经检查过了,我没有不小心将我的基类的源代码文件复制到解决方案的其他任何地方。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    我不知道 App_Code 文件夹不像普通文件夹那样工作。我认为这只是一个放置任何在项目结构中不一定需要自己的文件夹的半随机类的地方。当我写下这个问题时,我决定尝试将文件移动到不同的(普通)文件夹,一切都开始正常工作了。

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

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

    一旦我将文件的构建选项设置为Compile而不是Content(基于这个问题:Classes residing in App_Code is not accessible),将命名空间改回Website.App_Code就可以了。但是,在这种情况下,我认为将文件移动到项目结构中自己的普通文件夹中更合适。

    【讨论】:

      猜你喜欢
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多