C# 卸载AppDomain程序集

C# 卸载AppDomain程序集,c#,C#,我想从.Net程序集中读取一些信息,然后通过附加一小段字符来修改DLL。 第一部分工作正常,但第二步失败,因为组件仍在使用中。 尽管我在自己的AppDomain中加载了程序集,并且在完成步骤1后卸载了AppDomain,但情况仍然如此。如果不卸载AppDomain,则无法卸载程序集: 没有办法卸载一个文件 不卸载的单独组装 所有应用程序域 控制住它。即使大会结束 超出范围,实际的程序集文件 将保持加载状态,直到所有 包含它的应用程序域 货物已卸下 是否确定没有其他进程或AppDomain正在使

我想从.Net程序集中读取一些信息,然后通过附加一小段字符来修改DLL。
第一部分工作正常,但第二步失败,因为组件仍在使用中。

尽管我在自己的AppDomain中加载了程序集,并且在完成步骤1后卸载了AppDomain,但情况仍然如此。

如果不卸载AppDomain,则无法卸载程序集:

没有办法卸载一个文件 不卸载的单独组装 所有应用程序域 控制住它。即使大会结束 超出范围,实际的程序集文件 将保持加载状态,直到所有 包含它的应用程序域 货物已卸下


是否确定没有其他进程或AppDomain正在使用程序集?

如果不卸载AppDomain,则无法卸载程序集:

没有办法卸载一个文件 不卸载的单独组装 所有应用程序域 控制住它。即使大会结束 超出范围,实际的程序集文件 将保持加载状态,直到所有 包含它的应用程序域 货物已卸下


是否确实没有其他进程或AppDomain正在使用该程序集?

来自加载到单独AppDomain的程序集的引用有一个“泄漏”到父AppDomain的坏习惯,特别是当您反射程序集并跨边界交换类型信息时。在AppDomains中保持程序集隔离有很多“陷阱”,真正隔离


然而,有一个好消息:您可能不需要担心程序集被卸载,以便在磁盘上修改它-只需使用卷影复制!创建AppDomainSetup实例,将其ShadowCopyFiles属性设置为true,并在创建新AppDomain时传递该属性。这将导致程序集在加载前被复制到临时文件中,从而使原始程序集保持解锁状态并可供修改。

加载到单独AppDomain中的程序集的引用有“泄漏”到父AppDomain的坏习惯,尤其是在反射程序集并跨边界交换类型信息时。在AppDomains中保持程序集隔离有很多“陷阱”,真正隔离


然而,有一个好消息:您可能不需要担心程序集被卸载,以便在磁盘上修改它-只需使用卷影复制!创建AppDomainSetup实例,将其ShadowCopyFiles属性设置为true,并在创建新AppDomain时传递该属性。这将导致程序集在加载之前复制到临时文件中,保持原始程序集处于解锁状态并可供修改。

您最好使用类似的工具,这样您就可以在不将程序集加载到AppDomain的情况下检查和重写程序集。

您最好使用类似的工具,这样您就可以在不将程序集加载到AppDomain的情况下检查和重写程序集