Error occurred in deployment step ‘Retract Solution‘: xxx 无法反序列化,因为它没有公共的默认构造函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Error occurred in deployment step ‘Retract Solution‘: xxx 无法反序列化,因为它没有公共的默认构造函数相关的知识,希望对你有一定的参考价值。

一.环境:SharePoint 2016 + Visual Studio 2015,

二.错误描述

错误1:帮朋友写个计时器Demo,部署位置GAC,来回部署几次后,vs2015报错:

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 Error occurred in deployment step \'Retract Solution\': SP_CustomTimerJob.ListTimerJob 无法反序列化,因为它没有公共的默认构造函数。

 

错误2:打开管理中心—监控—复查作业,也报错:

SP_CustomTimerJob.ListTimerJob 无法反序列化,因为它没有公共的默认构造函数。

错误3:重新运行配置向导,继续报错:

System.MissingMethodException: SP_CustomTimerJob.ListTimerJob cannot be deserialized because it does not have a public default constructor

 

其他错误:使用各种命令卸载wsp或者删除TimerJob,都会报上面的错误。整个状态就是卸不掉,删不掉。

 

三.解决步骤

首先,当vs报错时,我着魔似的顺手把对应的Feature用PowerShell给删除了,导致通过正常途径(包括命令)再也删不掉wsp了(这个坑害的我用了几乎一天才爬上来)。

教训就是,不要手动删除wsp包中的feature,要通过卸载wsp包的方式来移除feature。

报错的原因是继承SPJobDefinition的类里,没有提供默认的构造函数。类似如下:

解决办法,修改继承的SPJobDefinition类,添加需要的构造函数。然后用vs重新生成一下(用vs部署会失败)。

下面就是用gacutil.exe工具,把项目的dll注册到GAC里。这是最关键的一步。完成后,会发现管理中心的"复查作业"可以进去了。

剩下的就是用命令强制移除原来的wsp包,然后重新添加,然后重新强制安装wsp包。

 

参考:

https://bernado-nguyen-hoan.com/2010/06/03/cant-retract-sharepoint-timer-job-because-the-job-cannot-be-deserialized-because-it-does-not-have-a-public-default-constructor/

https://sharepoint.stackexchange.com/questions/193490/solution-cannot-be-deserialized-because-it-does-not-have-a-public-default-constr

以上是关于Error occurred in deployment step ‘Retract Solution‘: xxx 无法反序列化,因为它没有公共的默认构造函数的主要内容,如果未能解决你的问题,请参考以下文章

The above error occurred in the <Table; component

报错:An error occurred at line: 22 in the generated java file The method getJspApplicationContext(Serv

mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command异常已解决

org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 16 in

mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command异常已解决(代码片段

mvn命令异常:An error has occurred in Javadoc report generation: Unable to find javadoc command异常已解决(代码片段