2014-02-05 2 views
2

Я пишу приложение MVC 4.5 с использованием MVCSiteMapProvider 4.4.9.0. При разработке в Visual Studio под управлением Visual Studio Development Server все работает так, как ожидалось. Однако после публикации проекта на производственном сервере я запускаю исключение NullReferenceException. Вот стек вызовов. (К сожалению, не хватает очков репутации, чтобы получить возможность отправлять снимок экрана)MVCSiteMapProvider дает нулевую ссылку при перемещении в производство

Server Error in '/' Application. 
-------------------------------------------------------------------------------- 

Object reference not set to an instance of an object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object. 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 


[NullReferenceException: Object reference not set to an instance of an object.] 
    MvcSiteMapProvider.Reflection.MvcSiteMapNodeAttributeDefinitionProvider.GetAttributeDefinitionsForControllers(Type type) +71 
    MvcSiteMapProvider.Reflection.MvcSiteMapNodeAttributeDefinitionProvider.GetMvcSiteMapNodeAttributeDefinitions(IEnumerable`1 assemblies) +168 
    MvcSiteMapProvider.DI.SiteMapNodeFactoryContainer.GetMvcSiteMapNodeAttributeDynamicNodeProviderNames() +105 
    MvcSiteMapProvider.DI.SiteMapNodeFactoryContainer.ResolveDynamicNodeProviders() +148 
    MvcSiteMapProvider.DI.SiteMapNodeFactoryContainer..ctor(ConfigurationSettings settings, IMvcContextFactory mvcContextFactory, IUrlPath urlPath) +306 
    MvcSiteMapProvider.DI.SiteMapLoaderContainer..ctor(ConfigurationSettings settings) +409 
    MvcSiteMapProvider.DI.Composer.Compose() +430 

[TargetInvocationException: Exception has been thrown by the target of an invocation.] 
    System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) +0 
    System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) +229 
    System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) +193 
    System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters) +35 
    WebActivatorEx.BaseActivationMethodAttribute.InvokeMethod() +341 
    WebActivatorEx.ActivationManager.RunActivationMethods(Boolean designerMode) +854 
    WebActivatorEx.ActivationManager.RunPostStartMethods() +40 
    WebActivatorEx.StartMethodCallingModule.Init(HttpApplication context) +159 
    System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +530 
    System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +304 
    System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +404 
    System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +475 

[HttpException (0x80004005): Exception has been thrown by the target of an invocation.] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12881540 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12722601 



-------------------------------------------------------------------------------- 
Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929 

Я сделал поиск по этой ошибки и те, которые я нашел показали совершенно другой стек вызовов следа.

Вот MVC.SiteMap

<?xml version="1.0" encoding="utf-8" ?> 
<mvcSiteMap xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0" 
      xsi:schemaLocation="http://mvcsitemap.codeplex.com/schemas/MvcSiteMap-File-4.0 MvcSiteMapSchema.xsd"> 

    <mvcSiteMapNode title="Projects" controller="Project" action="Index"> 
     <mvcSiteMapNode title="Supplier/Trade" controller="SupplierTrade" action="Index" preservedRouteParameters="pid"> 
      <mvcSiteMapNode title="Approval Actions" controller="SupplierTrade" action="ApprovalActions" preservedRouteParameters="pid, stmid"> 
       <mvcSiteMapNode title="Edit PMs" controller="User" action="Index" preservedRouteParameters="pid, stmid"/> 
       <mvcSiteMapNode title="Contractor Standard Invoice Percent" controller="ContractorStandardInvoicePercent" action="Index" preservedRouteParameters="pid, stmid"/> 
       <mvcSiteMapNode title="Approval Status Of CostCode" controller="ApprovalStatusOfCostCode" action="Index" preservedRouteParameters="pid, stmid"/> 
      </mvcSiteMapNode> 
     </mvcSiteMapNode> 
    </mvcSiteMapNode> 
</mvcSiteMap> 

Я продолжаю думать, что есть некоторая конфигурация установки я отсутствует или файл, который находится на моей машине Dev, но не на производственной машине, версия 3.3.6 работы безотказно. Есть идеи?

+0

Я получаю ту же ошибку, вы когда-нибудь, что было причиной этого? –

ответ

2

Ошибка указывает на то, что MvcSiteMapProvider сканирует ваш проект для узлов [MvcSiteMapNodeAttribute]. Некоторые вещи, которые вы можете попробовать:

  1. Если вы не используете [MvcSiteMapNodeAttribute] в приложении, вы можете отключить эту проверку, установив «MvcSiteMapProvider_ScanAssembliesForSiteMapNodes» к «ложным» в web.config.
  2. Если вы используете [MvcSiteMapNodeAttribute], убедитесь, что вы добавили все сборки, в которых вы их определили, в «MvcSiteMapProvider_IncludeAssembliesForScan», разделенные запятыми. Убедитесь, что каждое имя соответствует тому, что определено в поле «Название сборки» в свойствах проекта на вкладке «Приложение». Это (или поле «MvcSiteMapProvider_ExcludeAssembliesForScan») требуется, когда «MvcSiteMapProvider_ScanAssembliesForSiteMapNodes» является «истинным».
  3. Если вы используете «MvcSiteMapProvider_ExcludeAssembliesForScan», попробуйте переключиться на использование «MvcSiteMapProvider_IncludeAssembliesForScan», чтобы гарантировать, что MvcSiteMapProvider не собирает некоторые сборки, которых он не должен.

Ссылка: Configuring MvcSiteMapProvider

+0

Отключение MvcSiteMapProvider_ScanAssembliesForSiteMapNodes работало для меня, однако это странно, потому что это работает в других средах. Это было проблемой для нас при развертывании только на apecicit Azure VM –

+0

Похоже, что это может быть вызвано проблемой разрешения безопасности .NET Reflection в Azure. – NightOwl888

+0

Спасибо за отзыв NightOwl - в итоге оказалось, что .net framework не был зарегистрирован в IIS правильно на ящике –

 Смежные вопросы

  • Нет связанных вопросов^_^