我有一个问题, 在谷歌搜索和阅读文章分配了几个小时后,我明白Windows中的命名空间扩展非常tricky(至少在C ++中),现在我也看到它在C#中的possible,但是microsft没有正式确认使用.net进行命名空间扩展... 虽然我已经看到非常好的商业名称空间扩展框架,但没有一个是免费的....
所以我的问题:),我想开发自己的Namespace Extenssion,我有C ++ / C#knwoledge和基本的COM / ATL,但如果可以做到我更喜欢c#,那么c#inteop可以完全做好工作没有太多伎俩?或者应该在ATL潜水以创建必要的COM对象......
谢谢!
答案 0 :(得分:5)
一般来说,直到现在,它已经是bad idea to write a shell extension in managed code。一个进程只加载一个版本的CLR,如果其他人首先选择了一个不同的版本,那么,你已经死了。
这可能会在不久的将来发生变化,但此时坚持使用shell扩展的本机代码。
答案 1 :(得分:3)
编辑:以下是关于此主题的一些官方消息:
http://msdn.microsoft.com/en-us/magazine/ee819091.aspx
请注意有关2.x及更高版本的代码如何在同一进程中与4.0共存的非常准确的信息。因此,虽然SxS是4.0的功能,但它对2.x用户有好处。
然而,有这样的规定:
具有多个能力 运行时与其他任何进程 运行时,我们现在可以提供一般性 支持编写托管shell 扩展 - 甚至是那些运行的扩展 在任意应用程序中进行处理 在机器上。我们仍然没有 支持使用编写shell扩展 早于.NET的任何版本 框架4因为那些版本的 运行时不加载进程 相互之间并将导致 在许多情况下失败。
所以还有一个额外的问题:explorer.exe
进程不是托管shell扩展的唯一进程。任何具有“文件打开”对话框的程序都可能需要加载外壳扩展。因此,您的.NET 2.0-3.5扩展将无法在任何.NET 1.x应用程序的“文件打开”对话框中加载。它将与打印机驱动程序的GUI组件类似,它也会加载到显示标准打印机对话框的任何应用程序中。
因此,如果您想开发托管shell扩展,可以使用VS2010。