关于vs2015 MvcContrib 多项目 无法找到资源 解决办法

1 篇文章 0 订阅
1 篇文章 0 订阅

按照MvcContrib方式搭建了主/子项目,访问子项目url出现"无法找到资源"

MvcContrib方式请参考:
http://www.cnblogs.com/dingji/archive/2012/06/10/2544255.html

于是断点在:

public class MyDemoAreaRegistration : PortableAreaRegistration{
	public override string AreaName
    {
        get
        {
            return "MyDemo";
        }
    }
	public override void RegisterArea(AreaRegistrationContext context, IApplicationBus bus)
	{
		//断点处,此处方法是继承PortableAreaRegistration类的
		//...........
	}
}

运行发现代码并没有停在继承的方法处,说明继承的东西有问题,

既然是继承的东西有问题,那么我们来找一找被继承的PortableAreaRegistration类所定义的方法为什么没有被触发,

鼠标移上去,可见此类完全限定名为:MvcContrib.PortableAreas.PortableAreaRegistration

既然子项目引用了MvcContrib.dll,那么是不是主项目引用的MvcContrib.dll不一致呢?

展开主项目发现压根没有引用MvcContrib.dll,那么问题究竟出在哪里呢?

来到PortableAreaRegistration定义处,发现其继承了AreaRegistration类,

鼠标放到AreaRegistration上,可见完全限定名为:System.Web.Mvc.AreaRegistration

也就是说AreaRegistration类来自System.Web.Mvc.dll,此时恍然大悟,

查看主项目和子项目的System.Web.Mvc.dll,发现版本不一致,因此导致了主/子项目使用的dll不一致,

所以,子项目继承的类也不是同一个类,那么被继承的方法当然也就不会被触发咯

总结调用层次结构:

Global.asax.MvcApplication : System.Web.HttpApplication
{
	protected void Application_Start()
    {
        System.Web.Mvc.AreaRegistration.RegisterAllAreas();//此处System.Web.Mvc.AreaRegistration被public abstract class PortableAreaRegistration继承

        WebApiConfig.Register(GlobalConfiguration.Configuration);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
}

public abstract class MvcContrib.PortableAreas.PortableAreaRegistration : System.Web.Mvc.AreaRegistration
{
	public override void RegisterArea(AreaRegistrationContext context);//重写父类的方法
}

public class MyDemoAreaRegistration : MvcContrib.PortableAreas.PortableAreaRegistration
{
	public override string AreaName
    {
        get
        {
            return "MyDemo";
        }
    }
	public override void RegisterArea(AreaRegistrationContext context, IApplicationBus bus)
    {
    	//再次重写父类方法
    }
}

解决办法:更换子项目的System.Web.Mvc.dll使其和主项目System.Web.Mvc.dll的版本一致即可。

原因分析:
引起此现象其主要原因是因为子项目和主项目创建的时候使用的并不是同一个vs版本创建,vs2015抛弃了asp.net mvc4,因此在创建项目的时候只能选择net framework 4.5及以上,故此创建的是MVC5,才会出现引用System.Web.Mvc.dll版本不一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值