通过DTE获取设计时开发环境

通过 DTE 获取设计时开发环境

关键词: DTE ,设计时 , Design Time , 开发环境

写 Add-in 程序的朋友我想应该是再熟悉不过了,像大名鼎鼎的单元测试和重构工具等,还有宏,或者更多 … 只要嵌入到 VS 的开发环境当中去,我想 DTE 应该起到很重要的脚色。

在这里我就不说那么多,就说怎么在设计时( Design Time ) 获取项目的物理路径,我想做过组件的朋友应该不会陌生 Design Time 的用处。在设计时能够取到项目下的 Web.Config 的信息,或者取到自己定义的一些信息或数据。

那么 DTE 是在一个叫 "Microsoft Development Environment 7.0" 的 COM 当中的 EnvDTE 命名空间里。我们只需引用这个组件就行了。

废话不用说太多,这些 MSDN 上都有,下面具个简单例子,就是自定义组件的设计器里面取到项目的物理路径,不管你把组件从 ToolBox 中拉到哪个项目里面,都能准确地取到所在项目的物理路径,这就是设计时的好处。

public class TestControlDesigner : System.Web.UI.Design.ControlDesigner

{

public override string GetDesignTimeHtml()

{

string html = "found nothing" ;

try

{

EnvDTE.DTE devenv = null ;

devenv = (EnvDTE.DTE)System.Runtime.InteropServices. Marshal .GetActiveObject( "VisualStudio.DTE.7.1" );

Array projects = (System. Array )devenv.ActiveSolutionProjects;

if ((projects.Length == 0) || (projects.Length > 1))

{

html = "Exactly one project must be active" ;

}

else

{

EnvDTE.Project project = (EnvDTE.Project)(projects.GetValue(0));

System.IO. FileInfo info = new System.IO. FileInfo (project.FullName);

html = info.Directory.FullName;

}

}

catch (Exception ex)

{

html = "Exception occured: " + ex.Message;

}

return html;

}

}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus