2014-10-15 2 views
1

Я вижу много вопросов, задающих тот же вопрос, что и я, но это связано с тем, что это работает на моем локальном, который является окнами 7 и IISExpress VS Но на производственном сервере это дает мне эту ошибку. сервер имеет Windows Server 2008 и IIS 7.5 и точка NET Framework 4.5.1 (приложение является asp.net MVC 4)
Нет конструктора без параметров для этого объекта - работа на локальном компьютере, но не на рабочем сервере

StackTrace

[MissingMethodException: No parameterless constructor defined for this object.] 
    System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck) +0 
    System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +159 
    System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark) +256 
    System.Activator.CreateInstance(Type type, Boolean nonPublic) +127 
    System.Activator.CreateInstance(Type type) +11 
    System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +92 

[InvalidOperationException: An error occurred when trying to create a controller of type 'Website.Web.Controllers.MainController'. Make sure that the controller has a parameterless public constructor.] 
    System.Web.Mvc.DefaultControllerActivator.Create(RequestContext requestContext, Type controllerType) +256 
    System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) +81 
    System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) +270 
    System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +86 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +12638163 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +288 

MainController

public class MainController : BaseController 
    { 
     private readonly IUnitOfWork2 _uow2; 
     private readonly IContract _contract; 

     public MainController(IUnitOfWork2 uow2, IContract contract) 
     { 
      _contract = contract; 
      _uow2 = uow2; 
     } 

     public ActionResult Index() 
     { 
      return View(); 
     } 
    } 
} 

и BaseController

[Authorize] 
    public class BaseController : Controller 
    { 
     protected virtual new CustomPrincipal User 
     { 
      get { return HttpContext.User as CustomPrincipal; } 
     } 

Я понятия не имею, почему он работает на местном уровне, но после публикации дает мне ошибку!

+0

Глядя на ваш конструктор контроллера, вы используете какую-то форму инъекции зависимостей. Какой пакет вы используете для этого, и где вы это делаете (обычно Global.asax)? Мне кажется, что в разработке ваша фабрика контроллеров (во время выполнения) заменена версией DI, а после публикации вашего контроллера завод является исходной фабрикой контроллеров по умолчанию от MVC (глядя на ваш стек). Правильно ли опубликован ваш global.asax? – Maarten

+0

Я использовал 'StructuremapMvc' (старую версию) и ее в' App.App_Start'. ничего общего с Global.asax Я думаю, – mhesabi

+0

А вы, вероятно, используете 'WebActivator'. Возможно, вы можете проверить, действительно ли запущен метод 'Start', например, где-то записывает выполнение. Правильно ли опубликована сборка 'WebActivator'? Также возможно обновление до последней версии StructureMap? – Maarten

ответ

0

Я понимаю, что этот вопрос старый и, вероятно, разрешен, но я думал, что добавлю свой опыт с этой ошибкой. У меня есть проект, который начался с MVC3, и я недавно обновил его до MVC5 вместе с обновлением всех связанных пакетов. Я использую Ninject для DI, поэтому, конечно, я обновил это. Во время этого обновления NuGet сообщает, что он собирается скопировать NinjectWebCommon.cs, который содержит ваши привязки. Поэтому я позволил ему скопировать файл, а затем сравнить его с предыдущей версией и скопировать информацию привязки в RegisterServices(). После этого я мог отлаживать программное обеспечение на своем рабочем столе Win8, и он работал отлично, но после публикации с надписью «Удалить дополнительные файлы в месте назначения» я установил ошибку «Без параметров без конструктора».

Во всяком случае, я решил пообщаться с Ninject, так как понял, что это проблема. Я удалил и переустановил его и забыл восстановить привязки из предыдущей версии и запустить ее. Я получил ошибку при отладке на этот раз и быстро понял, где проблема. Каким-то образом пустая копия NinjectWebCommon.cs попадала на сервер, а не тот, который я обновил мои привязки.

Т.Л., др

По крайней мере, для меня, ошибки происходит из недостающих привязок в NinjectWebCommon.cs (или там, где ваши DI привязки расположены), хотя я скопировать их в недавно замененный файл. Поэтому, я думаю, убедитесь, что эти изменения попадают на сервер.

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