返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.net加载失败的程序集实现重新加载
  • 668
分享到

.net加载失败的程序集实现重新加载

2024-04-02 19:04:59 668人浏览 独家记忆
摘要

在.net程序中,程序集是Lazy加载的,只有在用的时候才会去加载,当程序集加载失败时,会触发AppDomain.AssemblyResolve的事件,在这个事件中,我们甚至还可以进

.net程序中,程序集是Lazy加载的,只有在用的时候才会去加载,当程序集加载失败时,会触发AppDomain.AssemblyResolve的事件,在这个事件中,我们甚至还可以进行补救,从别得地方重新加载程序集。

AppDomain.CurrentDomain.AssemblyResolve += (s, e) =>
{
    byte[] content = getLibBytes(e.Name);
    return Assembly.Load(content);
};

这个功能如果使用起来就非常灵活了,它可以控制我们自由控制程序集的加载方式。常用的方法有如下几个:

程序集保护:

.net程序是非常容易反编译的,这个特性提供了混淆外的另一个方式。由于动态调用的方式下,程序集不需要是原始dll,甚至都不需要存储在磁盘上。可以通过直接不让使用者获取到程序集的dll的方式防止反编译。

发布的程序的时候,不直接发布需要保护的程序集,将程序集加密后发布,或者直接加密后存储在服务器上。使用的时候,在AssemblyResolve中获取加密后的程序集,解密后返回。

程序集合并:

WPF程序由于使用了反射,使用传统的ILMerge的方式合并后,由于程序集变化了,往往不能正常工作。

有很多工具,通过将程序集合并到exe的资源文件中,使用的时候,再在ssemblyResolve中从资源文件中获取程序集返回。

客户端更新:

CS模式的程序一个不足就是更新不方便,可以将程序集存储在文件数据库中,直接更新程序集数据库就可以很方便的实现程序集更新。

程序集存储分离:

使用微服务模式时,很多部署在同一个服务器上的服务共用着相同的程序集(第三方的Nuget库),这些程序集更新频率很低,并且混在一起存储使得我们不容易找到业务程序集。

可以将这些程序集集中存储在独立的位置。服务文件夹中只发布我们的业务程序集,看起来更加清晰,更新也更加方便。

.net core

在.Net Core中,这个机制也是可以使用的,不过接口发生了一点变化:

AssemblyLoadContext.Default.Resolving += (context, assembly) =>
{
    var content = getLibBytes(assembly.FullName);
    return Assembly.Load(content);
};

需要说明的是,如果是使用 dotnet xxx.dll 的方式运行的话,dotnet 程序会首先通过 xxx.deps.JSON文件来获取所有相关的依赖性,从而还没有进入程序就报错。

可以通过修改 xxx.deps.json去掉依赖项,或者干脆直接删掉xxx.deps.json解决这个问题。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: .net加载失败的程序集实现重新加载

本文链接: https://lsjlt.com/news/153246.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • .net加载失败的程序集实现重新加载
    在.net程序中,程序集是Lazy加载的,只有在用的时候才会去加载,当程序集加载失败时,会触发AppDomain.AssemblyResolve的事件,在这个事件中,我们甚至还可以进...
    99+
    2024-04-02
  • .net加载失败的程序集怎么实现重新加载
    这篇文章主要介绍“.net加载失败的程序集怎么实现重新加载”,在日常操作中,相信很多人在.net加载失败的程序集怎么实现重新加载问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”.net加载失败的程序集怎么实现重...
    99+
    2023-07-02
  • react 实现图片正在加载中 加载完成 加载失败三个阶段的原理解析
    最近博客写道项目列表中,发现这里比较多图片,一开加载会比较慢,然后就想要用一个loading的图片来占位。与此同时,如果图片加载失败那么显示错误的图片,不显示一个原有的错误,那样比较...
    99+
    2024-04-02
  • Java IDE路径加载失败,是否需要重新安装?
    当你使用Java开发时,你可能会遇到“Java IDE路径加载失败”的错误提示。这个错误提示通常意味着你的IDE(集成开发环境)无法找到Java编译器或JRE(Java运行时环境)的路径。这种情况下,你可能会考虑重新安装Java IDE来...
    99+
    2023-07-23
    ide path load
  • 微信小程序如何重新加载页面
    微信小程序有提供一个下拉刷新的功能,操作步骤如下:打开小程序。点击右上角的“···”。会弹出一些功能信息,选择“刷新”即可。...
    99+
    2024-04-02
  • CSS加载失败的情况有哪些
    这篇文章主要讲解了“CSS加载失败的情况有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS加载失败的情况有哪些”吧!1、真正CSS加载失败 ...
    99+
    2024-04-02
  • 小程序怎么实现上拉刷新下拉加载
    这篇文章主要介绍“小程序怎么实现上拉刷新下拉加载”,在日常操作中,相信很多人在小程序怎么实现上拉刷新下拉加载问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”小程序怎么实现上拉刷新下拉加载”的疑惑有所帮助!接下来...
    99+
    2023-06-26
  • Linux程序运行时加载动态库失败的解决方法
    linux下不能加载动态库问题 当出现下边异常情况 ./test: error while loading shared libraries: libmfs_open.so: cannot open shared ob...
    99+
    2022-06-04
    linux加载动态库 linux程序运行时加载动态库失败的解决方法
  • 微信小程序运行环境加载失败怎么解决
    微信小程序运行环境加载失败可能是由于网络连接问题、服务器故障或者小程序代码问题引起的。要解决这个问题,可以尝试以下方法: 检查网...
    99+
    2024-03-15
    微信小程序
  • 微信小程序实现触底加载
    现在来看小程序还没有使用pc端的那种分页格式,现在微信小程序上分页一般使用触底加载来实现分页的,下面就来分享一个触底加载的实现方式。 1.首先要从后端也就是服务器上获取分页的数据,如...
    99+
    2024-04-02
  • 解决jupyter加载文件失败的问题
    遇到个小白常见的问题,发现度娘里面没有记录,翻墙谷歌了下,解决问题,在此写个说明。 事情起因: 在jupyter notebook中导入文件时发生了错误: %load p2_te...
    99+
    2024-04-02
  • 小程序列表懒加载的实现方式
    目录小程序上的列表懒加载分页加载用scroll事件监听用IntersectionObserver监听前端分页渲染用IntersectionObserver代替onReachBotto...
    99+
    2024-04-02
  • 小程序列表懒加载如何实现
    本文小编为大家详细介绍“小程序列表懒加载如何实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“小程序列表懒加载如何实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。小程序上的列表懒加载长列表我们经常接触到,长列...
    99+
    2023-06-29
  • 小程序如何实现图片预加载
    这篇文章主要为大家展示了“小程序如何实现图片预加载”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“小程序如何实现图片预加载”这篇文章吧。    网页有页面预加载,小程序也有图片预加载,小程序图片加...
    99+
    2023-06-26
  • 为什么Python中的HTTP对象加载失败?
    Python是一种广泛使用的编程语言,它在Web开发中特别流行。然而,有时候,我们会遇到Python中HTTP对象加载失败的问题。这个问题可能会导致我们的应用程序不稳定,甚至完全无法使用。那么,为什么Python中的HTTP对象会加载失败呢...
    99+
    2023-09-28
    load http 对象
  • 加载 dll 失败。找不到指定的模块
    大家好,今天本人给大家带来文章《加载 dll 失败。找不到指定的模块》,文中内容主要涉及到,如果你对Golang方面的知识点感兴趣,那就请各位朋友继续看下去吧~希望能真正帮到你们,谢谢!问题内容我有...
    99+
    2024-04-04
  • 微信小程序如何实现上滑加载下拉刷新
    这篇文章给大家分享的是有关微信小程序如何实现上滑加载下拉刷新的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。页面缓存的设置优化了页面加载,减少了频繁的调取接口,使用户在断网的情况下...
    99+
    2024-04-02
  • JS如何实现图片预加载之无序预加载功能
    这篇文章主要介绍JS如何实现图片预加载之无序预加载功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!图片预加载之无序预加载的效果图如下所示,如果大家感觉不错,请参考实现代码。具体代码...
    99+
    2024-04-02
  • 微信小程序怎么实现触底加载
    这篇文章主要介绍“微信小程序怎么实现触底加载”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“微信小程序怎么实现触底加载”文章能帮助大家解决问题。首先要从后端也就是服务器上获取分页的数据,如:每页多少条...
    99+
    2023-07-02
  • 微信小程序实现本地分页加载
    本文实例为大家分享了微信小程序实现本地分页加载的具体代码,供大家参考,具体内容如下 先看看效果图: 下面附上代码:(这些图片的地址记得改成自己的) 1、js文件: // pages...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作