取IDE当前文档所在项目的目录[vs.net2008]

首页要取得当前DTE(代表IDE的顶级对象)

查MSDN知道C#下有两种办法:
第一种,添加Microsoft.VisualBasic的引用,使用以下代码
EnvDTE80.DTE2 devenv = (EnvDTE80.DTE2)Microsoft.VisualBasic.Interaction.CreateObject("VisualStudio.DTE.9.0", "");

第二种,不需要添加VB的引用
EnvDTE80.DTE2 devenv = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.9.0");

为了使用EnvDTE,两种方法都要添加envdte和envdte80的引用。我尝试了第一种办法,可惜devenv.ActiveDocument总为null。头大的时候,放断点打开第二个IDE来调试第二种方法,devenv。ActiveDocument不为空,但对属性时会取不到。如devenv.ActiveDocument.ProjectItem.ContainingProject.FullName总返回空。

无果,上网查,资料不多,但这《error in visual studio 2008》[http://community.codesmithtools.com/forums/t/7803.aspx]找到了重要提示

 

Another thing to be careful of - if you have another studio open with a different project fired up:

 (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE.9.0");

 may end up grabbing from that studio, and your service section will not load properly.

于是关闭所有IDE(注意机器的进程是否在其他devenv.exe,调试过程我的机器就有两个关不掉),第二个方法能得到当前活动文档的项目路径。但第一种方法依然总是返回null。

posted @ 2008-09-10 16:04  生命体验之kevin-Y  阅读(559)  评论(0编辑  收藏  举报