从手机访问网站时出现奇怪的程序集名称错误

时间:2012-02-08 14:25:29

标签: asp.net-mvc-3 web-config

我有一个在Asp.net MVC中制作的网站,它安装在共享主机环境的根目录中。

现在,我已在Asp.net MVC中为此站点制作了移动版本,并将其安装为子域http://m.price-tag.org,指向文件夹 m (设置为虚拟目录) )在根目录中。

当有人从移动设备访问该网站时,会显示一个程序集限定名称错误,该错误会在刷新页面时消失。以下是iPhone模拟器的屏幕截图,显示相同的错误。即使在模拟器中,页面刷新时也会出错。

enter image description here

奇怪的是,错误中提到的类型用于我的主网站,而不是移动网站。为什么当我的移动项目完全不同并且有自己的web.config时会发生这种情况,但不知何故,似乎使用了root的web.config?这可能是web.config问题

注意: - 两个项目都有自己的EntityObject,Models和Web.config文件,它们之间没有任何共享。

编辑: - 此错误仅在移动设备中显示.....这也是第一次,如果刷新页面,它就会消失。

使用堆栈跟踪进行编辑

[InvalidOperationException: The type 'PriceCompare.Models.PriceCompareEntity, 
PriceCompare' could not be found. The type name must be an assembly-qualified name.]
System.Data.Entity.Internal.DatabaseInitializerConfig.ApplyInitializer() +315

[InvalidOperationException:无法为应用程序配置中指定的DbContext类型“PriceCompare.Models.PriceCompareEntity,PriceCompare”设置“已禁用”类型的数据库初始化程序。条目的格式应为'key =“DatabaseInitializerForType MyNamespace.MyDbContextClass,MyAssembly”value =“MyNamespace.MyInitializerClass,MyAssembly”'或'key =“DatabaseInitializerForType MyNamespace.MyDbContextClass,MyAssembly”value =“Disabled”'。初始化类必须具有无参数构造函数。有关详细信息,请参阅内部异常    System.Data.Entity.Internal.DatabaseInitializerConfig.ApplyInitializer()+383    System.Data.Entity.Internal.DatabaseInitializerConfig.ApplyInitializersFromConfig()+288    System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()+59    System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext c)+7    System.Data.Entity.Internal.RetryAction 1.PerformAction(TInput input) +118 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action 1动作)+190    System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()+73    System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)+27    System.Data.Entity.Internal.Linq.InternalSet 1.Initialize() +62 System.Data.Entity.Internal.Linq.InternalSet 1.get_InternalContext()+15    System.Data.Entity.Infrastructure.DbQuery 1.System.Linq.IQueryable.get_Provider() +37 System.Linq.Queryable.OrderByDescending(IQueryable 1个来源,表达式1 keySelector) +66 PriceMobile.Controllers.HomeController.Index() in HomeController.cs:19 lambda_method(Closure , ControllerBase , Object[] ) +40 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +17 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary 2个参数)+188    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary 2 parameters) +27 System.Web.Mvc.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() +56 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func 1 continuation)+267    System.Web.Mvc。&lt;&gt; c__DisplayClass17.b__14()+20    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext,IList 1 filters, ActionDescriptor actionDescriptor, IDictionary 2个参数)+190    System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext,String actionName)+329    System.Web.Mvc.Controller.ExecuteCore()+115    System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)+93    System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)+10    System.Web.Mvc。&lt;&gt; c__DisplayClassb.b__5()+37    System.Web.Mvc.Async。&lt;&gt; c__DisplayClass1.b__0()+21    System.Web.Mvc.Async。&lt;&gt; c__DisplayClass8 1.<BeginSynchronous>b__7(IAsyncResult _) +12 System.Web.Mvc.Async.WrappedAsyncResult 1.End()+55    System.Web.Mvc。&lt;&gt; c__DisplayClasse.b__d()+31    System.Web.Mvc.SecurityUtil.b__0(动作f)+7    System.Web.Mvc.SecurityUtil.ProcessInApplicationTrust(Action action)+23    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult)+59    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)+9    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+8969117    System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean&amp; completedSynchronously)+184

4 个答案:

答案 0 :(得分:2)

虚拟目录/应用程序默认继承root web.config文件。我们可以通过

来阻止这种行为
<location path="." inheritInChildApplications="false">
web.config

中的

Please visit for More information

答案 1 :(得分:1)

您需要使用inheritInChildApplications,以便子目录中的应用程序不会使用根应用程序配置。有关详细信息,请参阅this

对于appSettings部分,我们无法使用位置标记。因此,使用键/值对的配置,需要在子目录web.config中使用clear标记

答案 2 :(得分:0)

共享的东西 - PriceCompareEntity必须。我遇到了类似的问题。我在一个项目中包含了一个DLL,它引用了另一个我认为不需要的项目。该站点失败,并且在引用的DLL中对类型进行了类似的错误校验。

答案 3 :(得分:0)

两种可能性: 1)PriceCompare不仅是命名空间和dll的名称,而且还是某些Type的名称。这个系统让这个系统感到困惑。尝试更改类型的名称或dll和命名空间的名称。 2)网站无法找到具有正确版本的PriceCompare dll。这可能是因为系统的某些部分引用了此dll的旧版本。只有两个dll中的一个被采用,因此两个引用中的一个失败。清理您的项目以解决此问题