没有为此对象定义无参数构造函数 - 在本地计算机上工作,但在生产服务器上不工作

时间:2014-10-15 09:25:02

标签: c# asp.net-mvc-4

我看到很多问题都是我提出同样的问题,但是这个问题在我的本地工作,这是VS 2013的Windows 7和IISExpress,但在生产服务器上它给了我这个错误。服务器有Windows Server 2008和IIS 7.5以及dot net framework 4.5.1(该应用程序是asp.net mvc 4)

栈跟踪

[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; }
        }

我不知道为什么它在本地工作,但在发布后给了我错误!!

1 个答案:

答案 0 :(得分:0)

我意识到这个问题很老,很可能已经解决了,但我想我会在这个错误中加入我的经验。我有一个从MVC3开始的项目,我最近将它升级到MVC5,同时升级了所有相关的软件包。我正在使用Ninject进行DI,所以我当然升级了它。在升级过程中,NuGet告诉你它将复制NinjectWebCommon.cs,它包含你的绑定。所以我让它复制文件,然后将它与以前的版本进行比较,并在RegisterServices()中复制绑定信息。之后,我可以在我的Win8桌面上调试软件,它运行得很完美,但是在发布后使​​用"删除目的地的其他文件"检查我得到了"没有定义无参数构造函数"错误。

无论如何,我决定搞砸Ninject因为我认为这是问题所在。我卸载并重新安装它,忘了恢复以前版本的绑定并运行它。我在调试这个时间时遇到了错误并很快意识到问题所在。不知怎的,NinjectWebCommon.cs的空白副本进入了服务器,而不是我用绑定更新的那个。

<强> TL;博士

至少对我来说,错误来自于NinjectWebCommon.cs中的缺失绑定(或者DI绑定所在的任何位置),即使我将它们复制到新替换的文件中也是如此。所以我想,确保这些更改正在进入服务器。