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

本文介绍了解决SharePoint计时器作业部署中出现的反序列化错误的方法。错误源于未提供公共默认构造函数,解决步骤包括修改构造函数、使用GAC工具注册DLL并强制移除和重新部署WSP包。

一.环境: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

在使用 e2studio 进行程序调试或启动时,如果遇到错误提示 `Error: Exception occurred during launch. Reason: Error in final launch sequence. Error executing step: execute method stepEvaluateServerParams`,通常表明在启动调试会话的最后阶段出现了异常,尤其是在评估服务器参数时发生了错误。 ### 可能的原因及解决办法 1. **配置问题** 该错误可能与调试配置相关。检查 e2studio 中的调试配置是否正确,尤其是与目标设备、调试器(如 E2 Emulator)相关的设置。确保目标设备的连接参数(如 IP 地址、端口号)正确无误,并且调试器驱动程序已正确安装[^3]。 2. **服务器参数配置错误** 错误信息中提到了 `stepEvaluateServerParams`,这表明问题出在服务器参数的评估阶段。检查与调试服务器相关的配置文件(如 `.launch` 文件),确保其中的参数设置正确。例如,确认 `serverPort`、`serverHost` 等字段是否指向正确的调试服务器地址和端口。 3. **e2studio 插件或版本问题** 某些版本的 e2studio 或其插件可能存在兼容性问题。尝试更新 e2studio 到最新版本,或重新安装相关插件(如 Renesas e2studio Debugger 插件)。此外,确保使用的 Eclipse 版本与 e2studio 兼容。 4. **权限问题** 如果调试服务器需要特定权限才能运行,确保当前用户具有执行调试服务器的权限。在某些操作系统上,可能需要以管理员或 root 权限运行 e2studio。 5. **日志分析** 查看 e2studio 的日志文件(通常位于工作区目录下的 `.metadata/.log` 文件中),寻找更详细的错误信息。日志中可能会包含导致 `stepEvaluateServerParams` 失败的具体原因,例如网络连接失败、端口被占用等。 6. **网络连接问题** 如果调试服务器运行在远程主机上,确保本地与远程服务器之间的网络连接正常。使用 `ping` 或 `telnet` 命令测试目标端口是否可达。 7. **重新配置调试环境** 尝试创建一个新的调试配置,并逐步检查每个步骤的配置是否正确。有时,旧的配置文件可能包含不兼容或损坏的数据,重新创建配置可以排除这些问题。 ### 示例:检查 `.launch` 文件中的参数 ```xml <launchConfiguration type="com.renesas.e2studio.debugger.launch.R5DSC"> <stringAttribute key="serverHost" value="localhost"/> <stringAttribute key="serverPort" value="7000"/> <stringAttribute key="device" value="R5F563NBDDFC"/> </launchConfiguration> ``` 确保 `serverHost` 和 `serverPort` 的值与实际调试服务器的地址和端口匹配。 ### 调试建议 - 在尝试上述解决办法之前,建议先关闭所有与 e2studio 相关的进程,并重新启动 IDE。 - 如果问题仍然存在,可以尝试使用命令行方式启动调试服务器,查看是否有更详细的错误输出。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值