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

本文关键字:工作 服务器 计算机 定义 对象 参数 构造函数 | 更新日期: 2023-09-27 18:26:30

我看到很多问题都在问和我一样的问题,但令人惊讶的是,这在我的本地(即VS 2013的windows 7和IISExpress)上有效,但在生产服务器上它给了我这个错误。服务器有windows服务器2008和IIS 7.5以及dot net框架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

主控制器

 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();
        }
    }
}

基本控制器

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

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

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

我意识到这个问题已经过时了,很可能已经解决了,但我想我应该添加我的经验来处理这个错误。我有一个项目是从MVC3开始的,最近我把它升级到了MVC5,并升级了所有相关的包。我正在使用Ninject进行DI,所以我当然升级了它。在升级过程中,NuGet告诉您它将通过NinjectWebCommon.cs进行复制,该NinjectWebCommon.cs保存您的绑定。所以我让它复制到文件上,然后将其与以前的版本进行比较,并在RegisterServices()中复制绑定信息。在那之后,我可以在Win8桌面上调试软件,它运行得很好,但在发布并选中"删除目标处的其他文件"后,我得到了"未定义无参数构造函数"的错误。

不管怎样,我决定搞砸Ninject,因为我认为这就是问题所在。我卸载并重新安装了它,忘记恢复以前版本的绑定并运行了它。这次我在调试时遇到了错误,很快就意识到问题出在哪里。不知怎的,NinjectWebCommon.cs的空白副本正在到达服务器,而不是我用绑定更新的那个。

tl;dr

至少对我来说,错误来自NinjectWebCommon.cs中丢失的绑定(或DI绑定所在的位置),尽管我确实将它们复制到了新替换的文件中。所以我想,请确保这些更改已到达服务器。