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

目录
相关文章
|
JavaScript 应用服务中间件 nginx
vuecli3打包项目上线之后报错怎么使用本地的sourcemap文件定位调试?
vuecli3打包项目上线之后报错怎么使用本地的sourcemap文件定位调试?
218 0
|
存储 编译器 C++
关于“VS2022无法打开头文件<graphics.h>” 以及编译时 “没有与参数列表匹配的重载函数实例”俩个问题的解决思路
关于“VS2022无法打开头文件<graphics.h>” 以及编译时 “没有与参数列表匹配的重载函数实例”俩个问题的解决思路
3342 0
|
Windows
关于:未能加载文件或程序集“ICSharpCode.SharpZipLib”或它的某一个依赖项异常的解决方案
关于:未能加载文件或程序集“ICSharpCode.SharpZipLib”或它的某一个依赖项异常的解决方案
1059 0
|
10月前
|
存储 缓存 Java
JavaSE高级篇:运行时数据区
JavaSE高级篇:运行时数据区
|
测试技术 Android开发
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
290 0
消失的Eclipse-控制台console、右侧项目导航Package Explorer、点击类不弹出内容、copy过来正确的测试单元类'废了'的解决措施、eclipse设置编译前自动保存代码
|
Java
(3连bug)接上文, 导入idea之前的旧项目,所有.class文件package路径都出现多了main.
这是重装idea之后打开第二个之前大学开发的外卖程序, 还是出现上文一模一样的问题
224 1
(3连bug)接上文, 导入idea之前的旧项目,所有.class文件package路径都出现多了main.
|
Java 图形学
Unity打包符号表 使用ndk addr2line.exe+符号表 将崩溃内存地址解析成函数名
符号表的路径,符号表发布出来的时候是一个zip文件要把它解压出来,里面会有两个文件:arm64-v8a(64位)、armeabi-v7a(32位)不过unity默认打包出来的都是64位的程序,所以这个前面加上你的真实路径+arm64-v8a\libil2cpp.sym.so就可以了。
关于 VS调试时出现“当前不会命中断点。还没有为该文将加载任何符号。” 的解决方法
关于 VS调试时出现“当前不会命中断点。还没有为该文将加载任何符号。” 的解决方法
关于 VS调试时出现“当前不会命中断点。还没有为该文将加载任何符号。” 的解决方法