自问:
我在制作VS插件,智能感应都不提示EnvDTE命名空间里的所有接口、类、方法等。例如如下代码:
using System;
using System.Collections.Generic;
using System.Text;
using EnvDTE;
namespace MyAddin2
{
class Class1 { Document document; }
}
鼠标指向Document只提示interface EnvDTE.Document。而我去看MSDN,里面是有说明的“Represents a document in the environment open for editing.”
如果光是这样我也认了,可是我下载了CopySourceAsHtml插件的源代码,用VS打开看,鼠标指向Document IDE就提示Represents a document in the environment open for editing.
好奇怪啊,怎么回事?
自答:
- 我的插件代码是通过向导生成的,它给我添加的引用的命名空间是在C:/Windows/assembly/GAC/……而事实上assembly里根本没有GAC这个文件夹,也不知道怎么回事。
- CopySourceAsHtml插件的源代码引用的EnvDTE是位于C:/Program Files/Common Files/Microsoft Shared/MSEnv/PublicAssemblies/EnvDTE.dll。发现EnvDTE.dll的同级目录下有EnvDTE.xml,里面正保存了智能感应的提示!
- 我在我的项目里把向导添加的EnvDTE卸载,再手工添加,发现添加窗口中EnvDTE的路径是D:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE/PublicAssemblies/EnvDTE.dll(路径的前面部分是VS的安装路径),同级目录下无相应的XML文件。重启VS,仍然无提示。
- 复制C:/Program Files/Common Files/Microsoft Shared/MSEnv/PublicAssemblies/下的XML文件到D:/Program Files/Microsoft Visual Studio 9.0/Common7/IDE/PublicAssemblies/,重启VS,获得提示!
总结,VS添加引用对话框.net选项夹里组件的位置从没有在C:/Windows/assembly/……。某个DLL组件要有相应的XML文件才会产生提示,所以当VS不提示某些东西的时候,可以去那个路径看看XML在不在。
另外向导生成的项目可能不可靠,用时要多注意。