我看到很多问题都是我提出同样的问题,但是这个问题在我的本地工作,这是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; }
}
我不知道为什么它在本地工作,但在发布后给了我错误!!
答案 0 :(得分:0)
我意识到这个问题很老,很可能已经解决了,但我想我会在这个错误中加入我的经验。我有一个从MVC3开始的项目,我最近将它升级到MVC5,同时升级了所有相关的软件包。我正在使用Ninject进行DI,所以我当然升级了它。在升级过程中,NuGet告诉你它将复制NinjectWebCommon.cs,它包含你的绑定。所以我让它复制文件,然后将它与以前的版本进行比较,并在RegisterServices()中复制绑定信息。之后,我可以在我的Win8桌面上调试软件,它运行得很完美,但是在发布后使用"删除目的地的其他文件"检查我得到了"没有定义无参数构造函数"错误。
无论如何,我决定搞砸Ninject因为我认为这是问题所在。我卸载并重新安装它,忘了恢复以前版本的绑定并运行它。我在调试这个时间时遇到了错误并很快意识到问题所在。不知怎的,NinjectWebCommon.cs的空白副本进入了服务器,而不是我用绑定更新的那个。
<强> TL;博士强>
至少对我来说,错误来自于NinjectWebCommon.cs中的缺失绑定(或者DI绑定所在的任何位置),即使我将它们复制到新替换的文件中也是如此。所以我想,确保这些更改正在进入服务器。