简而言之: 我是VisualStudio Extensibility的新手,我的目标是使用ToolWindow创建一个扩展(已经可以工作),为VisualStudio解决方案的每个上下文显示不同的视图。即解决方案的视图,项目的视图等。应通过单击解决方案资源管理器,类视图,对象浏览器的上下文菜单中的上下文菜单条目以及(理想情况下)显示内容的任何其他窗口来打开窗口。项目,命名空间,类等。
搜索后我发现了很多信息,但对于某些观点,我找不到非常有用的信息。我怎么......
到目前为止我做了什么: 我阅读了Starting to Develop Visual Studio Extensions的文档并下载了VSSDK-Extensibility-Samples。特别是WPF_Toolwindow示例对我的目的来说很有意思,所以我构建并运行它,到目前为止成功了。另一个有趣的示例是WPFDesigner_XML,但它总是抛出NullReferenceException,所以我决定坚持使用以前的ToolWindow,这完全没问题。
更进一步,我试图通过仔细查看项目中的每个文件,在调试器中运行它并分析发生的事情来理解该示例。我有信心我理解它,但我也愿意纠正我可能被误导的想法。
现在,我已经创建了一个基于WPF_Toolwindow示例的新项目,根据我的需要进行了重命名和调整(基本上,我创建了新的GUID,重命名了名称空间并删除了我不会使用的内容)。此扩展仍可在调试器中使用。我甚至从实验实例中卸载了所有内容,并从头开始调试扩展。
我尝试实现的目标:
有没有人知道这样的例子,或者有人能给我一些提示,我可以在哪里找到更多信息?任何帮助,将不胜感激。提前谢谢。
答案 0 :(得分:0)
(1)这些项目已经有了一个上下文菜单,我想在这个菜单中添加一个新命令。
https://github.com/visualstudioextensibility/VSX-Samples/tree/master/CommandSubmenu
(3)是的,基本上将文件添加到项目而不手动操作项目文件会很好。
您可以通过Project.ProjectItems.AddFromFile将该文件添加到项目中,以下提供了一个示例供您参考。
https://www.mztools.com/Articles/2014/MZ2014009.aspx
更新
我选择了一个项目并触发了类似的事件。我可以订阅这样的活动吗?
您可以使用IVsMonitorSelection来实现。这是检索相关项目路径的代码供您参考。
IntPtr hierarchyPointer, selectionContainerPointer;
Object selectedObject = null;
IVsMultiItemSelect multiItemSelect;
uint projectItemId;
IVsMonitorSelection monitorSelection =
(IVsMonitorSelection)Package.GetGlobalService(
typeof(SVsShellMonitorSelection));
monitorSelection.GetCurrentSelection(out hierarchyPointer,
out projectItemId,
out multiItemSelect,
out selectionContainerPointer);
IVsHierarchy selectedHierarchy = Marshal.GetTypedObjectForIUnknown(
hierarchyPointer,
typeof(IVsHierarchy)) as IVsHierarchy;
if (selectedHierarchy != null)
{
ErrorHandler.ThrowOnFailure(selectedHierarchy.GetProperty(
projectItemId,
(int)__VSHPROPID.VSHPROPID_ExtObject,
out selectedObject));
}
Project selectedProject = selectedObject as Project;
string projectPath = selectedProject.FullName;
有关用法的更多信息,请参阅: