如果我有一个托管DLL和一个非托管资源管理器扩展,是否有可能以某种方式加载托管DLL,而无需将CLR拖入资源管理器的进程空间?如何在不加载CLR的情况下使用托管DLL?
我知道编写一个受管理的浏览器扩展是一个不允许的,因为它将CLR加载到资源管理器中,并导致发生使用CLR的其他插件/扩展的问题,但我有一些我想要的托管代码在我的扩展中使用。我怎样才能避免这个问题?
如果我有一个托管DLL和一个非托管资源管理器扩展,是否有可能以某种方式加载托管DLL,而无需将CLR拖入资源管理器的进程空间?如何在不加载CLR的情况下使用托管DLL?
我知道编写一个受管理的浏览器扩展是一个不允许的,因为它将CLR加载到资源管理器中,并导致发生使用CLR的其他插件/扩展的问题,但我有一些我想要的托管代码在我的扩展中使用。我怎样才能避免这个问题?
不是一个理想的答案,而是一条可以考虑的路线。编写一个非托管代理并使用命名管道/其他IPC调用托管代码服务。这是一个有点俗气和气味,但如果你被卡住..
您可以随时等待Windows 8的WinRT是完全非托管和API的语法是非常像.NET
然后等到所有人升级。无论如何,Windows的所有早期版本都不受管理。 –
托管的DLL运行使用CLR。使用没有CLR的托管DLL就像试图在没有空气的情况下飞行一架飞机。总之:这是不能做到的。你将不得不使用某种远程方式来获得所需的结果。 –
.NET 4.0中的进程内并行支持旨在解决此问题。具有讽刺意味的是,微软后来宣称使用它来编写一个不受支持的用法。那么,这不像你会得到很多支持让一个进程外解决方案工作。 http://www.google.com/url?sa=t&rct=j&q=jialiang%20shell%20extensions&source=web&cd=1&ved=0CCIQFjAA&url=http%3A%2F%2Fgeekswithblogs.net%2FJialiang%2Farchive%2F2010%2F09%2F16% 2Fwriting-windows-shell-extension-with-.net-4 --- part-1.aspx&ei = -xWfToX9EuOSiQLD1Nxl&usg = AFQjCNFlQ4Hz-QCRfPYYHuCtmQbsokjVHQ&cad = rja –
有趣的问题。如果这是可能的,为什么我们会使用“CLR”?要挑剔,实际上,你可以*加载*它,但不*执行*它:-) –