UiPath安装自定义活动包时程序集加载失败(TypeLoadException)求助
DisposeAsync TypeLoadException错误 嘿,咱们来拆解一下你遇到的这个问题——你用UiPath Activity Creator做的EF Core自定义活动,发布后在UiPath里装不上,报错说DbContext的DisposeAsync方法没有实现。这个问题本质是EF Core版本和UiPath运行环境的.NET Framework兼容性冲突,具体原因和解决办法如下:
别把EF Core的DLL打包进你的活动NuGet包
你的Visual Studio项目里,把EF Core相关的NuGet引用设置成不随包分发。打开.csproj文件,修改EF Core的包引用节点,加上<PrivateAssets>all</PrivateAssets>:<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.5"> <PrivateAssets>all</PrivateAssets> </PackageReference>这么做是因为UiPath的运行环境本身已经自带(或者可以通过包管理器安装)兼容的EF Core组件,你自己打包的DLL会和环境里的版本打架,引发类型加载异常。
降级EF Core版本到兼容.NET Framework 4.6.1的版本
EF Core 3.x对.NET Framework的支持有坑,尤其是异步方法这块。如果你必须在自定义活动里用EF Core,建议把版本降到2.2.x,这个版本对.NET Framework 4.6.1的适配更完善,不会出现DisposeAsync找不到实现的问题。清理NuGet缓存后重新打包安装
先把本地NuGet缓存清干净,避免残留的旧版本文件搞事情:nuget locals all -clear然后重新编译发布你的自定义活动,再去UiPath里尝试安装。
同步UiPath项目的EF Core依赖版本
如果坚持要把EF Core DLL打包进去,那一定要确保UiPath项目里安装的EF Core版本和你自定义活动用的完全一致,版本号差一个小版本都可能引发冲突。
补充一下:这个错误的底层原因是.NET Framework 4.6.1本身不支持.NET Core引入的部分异步接口默认实现,EF Core 3.x在.NET Framework平台上的适配没处理好
DbContext.DisposeAsync的实现,导致加载时抛出类型加载异常。
内容的提问来源于stack exchange,提问作者Maryam

