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正是我们需要的!接下来就好办了。

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

复制代码
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命令,可以这样实现:

复制代码
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也是类似:

复制代码
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,如需转载请自行联系原作者。

目录
相关文章
|
11月前
|
前端开发
解决VScode在保存less文件时,自动生成对应的css文件以及安装Easy less之后,计算式子不显示结果的问题
解决VScode在保存less文件时,自动生成对应的css文件以及安装Easy less之后,计算式子不显示结果的问题
|
5月前
|
Java 编译器 C++
详尽分享通过exe启动class
详尽分享通过exe启动class
25 1
|
测试技术 Android开发
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
245 0
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
|
API 网络架构
docfx 简单使用方法、自动生成目录的工具
docfx 简单使用方法、自动生成目录的工具
356 0
|
区块链 C++ Windows
写了个VC++ MFC小工具,一键整理Resource.h文件,重新排序并去重复ID(★firecat推荐★)
写了个VC++ MFC小工具,一键整理Resource.h文件,重新排序并去重复ID(★firecat推荐★)
1015 0
写了个VC++ MFC小工具,一键整理Resource.h文件,重新排序并去重复ID(★firecat推荐★)
|
XML 数据格式
【Tip】如何让引用的dll随附的xml注释文档、pdb调试库等文件不出现在项目输出目录中
原文:【Tip】如何让引用的dll随附的xml注释文档、pdb调试库等文件不出现在项目输出目录中 项目输出目录(bin/debug|release)中经常是这个样子: main.exemain.pdb a.dll a.xml b.dll b.pdb b.xml ... 其中xml是同名dll的注释文档,pdb是调试库。
948 0