没有为此对象定义无参数构造函数-在本地计算机上工作,但在生产服务器上不工作
本文关键字:工作 服务器 计算机 定义 对象 参数 构造函数 | 更新日期: 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绑定所在的位置),尽管我确实将它们复制到了新替换的文件中。所以我想,请确保这些更改已到达服务器。