VS Addin开发小技巧:获取Solution Explorer中文件项的路径

简介:
  在VS2008中,当我们打开一个文档时,在顶部的Tab上有几个实用的菜单项:

vs-document-context-menu

这里主要看其中的两项:Copy Full Path和Open Containing Folder,可以获取文档的路径或者打开包含当前文档的文件夹,尤其是后者,是经常会用到的。

不过在Solution Explorer中,却没有对应的菜单项,当你需要的时候,只好先打开文档,再使用上面的菜单。现在考虑如何在Addin中添加这两个缺失的菜单。

对于打开的文档,都会有一个Document类型的实例与之对应,通过它的FullName属性可以了解当前文档的完整路径,有了这个路径,上述菜单功能就容易实现了。

在Solution Explorer中,有些不同,对于其中的文件项,对应的是ProjectItem的实例,它倒是有个Document属性,不过如果文档没打开,那么这个属性就为null,对于我们此处的需求来说,Document就用不上了。仔细观察一下就会发现,ProjectItem有个Properties属性,而该集合属性有若干有用的信息,其中的FullPath正是我们需要的!接下来就好办了。

首先添加两个命令到文件项的上下文菜单:

复制代码
ExpandedBlockStart.gif C# Code - 添加命令
CommandBar projectItemCommandBar = helper.GetCommandBarByName("Item");

try
{
    helper.AddNamedCommand2(projectItemCommandBar, COPY_FULL_PATH_COMMAND_NAME,
        
"Copy Full Path""Copy Full Path"false0, projectItemCommandBar.Controls.Count + 1);

    helper.AddNamedCommand2(projectItemCommandBar, OPEN_CONTAINING_FOLDER_COMMAND_NAME,
        
"Open Containing Folder""Open Containing Folder"false0, projectItemCommandBar.Controls.Count + 1);
}
catch
{
}
复制代码


对于Copy Full Path命令,可以这样实现:

复制代码
ExpandedBlockStart.gif C# Code - Copy Full Path Command
private void CopyFullPath()
{
    SelectedItems items 
= _applicationObject.SelectedItems;
    ProjectItem item 
= items.Item(1).ProjectItem;

    
string fullPath = item.Properties.Item("FullPath").Value.ToString();
    Clipboard.SetText(fullPath);
}
复制代码


而对于Open Containing Folder也是类似:

复制代码
ExpandedBlockStart.gif C# Code - OpenContainingFolder Command
private void OpenContainingFolder()
{
    SelectedItems items 
= _applicationObject.SelectedItems;
    ProjectItem item 
= items.Item(1).ProjectItem;

    
string fullPath = item.Properties.Item("FullPath").Value.ToString();
    System.Diagnostics.Process.Start(
"explorer.exe",
        
string.Format("/select, \"{0}\"", fullPath));
}
复制代码

 

除了这两个基本的命令,根据这个路径,我们还可以去做更多的事情。比如在最近的一个项目中,假设项目名称为MyProj,那么他们规定存放解决方案的目录必须MyProj,如D:\MyWorks\MyProj(也可以不这样,但那样会更麻烦),在此之后,会频繁使用到从MyProj开始的相对路径。如果手工去做,显然会浪费很多时间,通过上面的方法,完全可以获取文件路径,然后截取MyProj之后的部分,时间长了会节省很多时间。

看下来,这是一个相当简单的技巧,但是却很实用。当前很少有资料提到这个地方,而且它还隐藏在Properties这里面,这又是一个VS Addin API的一个不好的地方——不是通过简单的属性直接开放,而是堆放在一些集合属性中——这时必须要耐心地去查看集合的每一项才能知道是否有自己需要的东西。




本文转自一个程序员的自省博客园博客,原文链接:http://www.cnblogs.com/anderslly/archive/2009/08/30/retrieve-project-item-full-path.html,如需转载请自行联系原作者。

目录
相关文章
|
8月前
|
前端开发
解决VScode在保存less文件时,自动生成对应的css文件以及安装Easy less之后,计算式子不显示结果的问题
解决VScode在保存less文件时,自动生成对应的css文件以及安装Easy less之后,计算式子不显示结果的问题
|
Windows
关于:未能加载文件或程序集“ICSharpCode.SharpZipLib”或它的某一个依赖项异常的解决方案
关于:未能加载文件或程序集“ICSharpCode.SharpZipLib”或它的某一个依赖项异常的解决方案
737 0
|
2月前
|
Java 编译器 C++
详尽分享通过exe启动class
详尽分享通过exe启动class
16 1
|
11月前
|
IDE Java API
如何配置 jad,让 Eclipse 可以自动显示反编译之后的 .class 源代码
如何配置 jad,让 Eclipse 可以自动显示反编译之后的 .class 源代码
|
11月前
|
前端开发 JavaScript API
单步调试找到 cy.visit 的实现源代码(一) - 找到了 BlueBird
单步调试找到 cy.visit 的实现源代码(一) - 找到了 BlueBird
|
Java
(3连bug)接上文, 导入idea之前的旧项目,所有.class文件package路径都出现多了main.
这是重装idea之后打开第二个之前大学开发的外卖程序, 还是出现上文一模一样的问题
184 1
(3连bug)接上文, 导入idea之前的旧项目,所有.class文件package路径都出现多了main.
|
测试技术 Android开发
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
212 0
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
|
编译器 Python
给你的Goland或者PyCharm编译器追加header作者信息(JetBrains全家桶通用)
给你的Goland或者PyCharm编译器追加header作者信息(JetBrains全家桶通用)
给你的Goland或者PyCharm编译器追加header作者信息(JetBrains全家桶通用)
|
XML Java 应用服务中间件
eclipse关于xml文件有两种方式显示 Design方式-图形化方式,Source-源码方式
eclipse关于xml文件有两种方式显示 Design方式-图形化方式,Source-源码方式
1094 0
eclipse关于xml文件有两种方式显示 Design方式-图形化方式,Source-源码方式
C#(三十三)之路径(Path)
路径由System.Drawing.Drawing2D命名空间的GraphicsPath类实现。路径的紫图行可以是直线、弧、椭圆、矩形等几何图形。如果起点和终点闭合,则称之为闭合路径,否则称之为开放路径。
284 0
C#(三十三)之路径(Path)