Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从本机代码卸载.NET COM互操作库_.net_Dll_Com_Com Interop - Fatal编程技术网

从本机代码卸载.NET COM互操作库

从本机代码卸载.NET COM互操作库,.net,dll,com,com-interop,.net,Dll,Com,Com Interop,我有一个C#.NET DLL,它包含一个ComVisible(true)类。我可以注册/调用/取消注册此库,没有任何问题 然而,我想要的场景涉及一个本机进程,将DLL提取到一个临时文件夹中,注册它,运行一些函数,取消注册,最后删除DLL,所有这些都在合理的短时间内完成 (使用免注册COM会很好,但我无法控制DLL位置或清单。) 在删除部分之前,所有这些都可以正常工作。框架中似乎有什么东西会一直锁定DLL,直到进程退出,即使我已经释放了对任何对象的所有引用并调用了cofreeunsedlibrar

我有一个C#.NET DLL,它包含一个
ComVisible(true)
类。我可以注册/调用/取消注册此库,没有任何问题

然而,我想要的场景涉及一个本机进程,将DLL提取到一个临时文件夹中,注册它,运行一些函数,取消注册,最后删除DLL,所有这些都在合理的短时间内完成

(使用免注册COM会很好,但我无法控制DLL位置或清单。)

在删除部分之前,所有这些都可以正常工作。框架中似乎有什么东西会一直锁定DLL,直到进程退出,即使我已经释放了对任何对象的所有引用并调用了
cofreeunsedlibraries

让本机代码完全卸载CLR和/或释放COM程序集(及其任何引用的程序集)还有其他技巧吗?或者在一个单独的进程中运行它


请注意,我没有直接访问本机代码的权限,只有它上面的脚本层,因此我可以进行一些额外的WinAPI调用,但不能更改传递给CoCreateInstance的标志等。

我认为这是不可能的,因为如果将程序集加载到AppDomain中,则无法卸载程序集。对,但是有可能从本机代码中卸载所有托管AppDomain吗?我没有测试,但尝试使用
AppDomain.unload(domain)我认为这是不可能的,因为如果将程序集加载到AppDomain中,则无法卸载程序集。对,但是否可以从本机代码中卸载所有托管AppDomain?我没有进行测试,但尝试使用
AppDomain.unload(domain)