検証環境
- Visual Studio 2017
概要
private void MenuItemCallback( object sender, EventArgs e ) { Object selectedObject = null; var monitorSelection = Package.GetGlobalService( typeof( SVsShellMonitorSelection ) ) as IVsMonitorSelection; monitorSelection.GetCurrentSelection ( out IntPtr hierarchyPointer, out uint projectItemId, out IVsMultiItemSelect multiItemSelect, out IntPtr selectionContainerPointer ); if ( Marshal.GetTypedObjectForIUnknown( hierarchyPointer, typeof( IVsHierarchy ) ) is IVsHierarchy selectedHierarchy ) { ErrorHandler.ThrowOnFailure ( selectedHierarchy.GetProperty ( projectItemId, ( int )__VSHPROPID.VSHPROPID_ExtObject, out selectedObject ) ); } var selectedProjectItem = selectedObject as ProjectItem; var fullPath = selectedProjectItem.Properties.Item( "FullPath" ).Value.ToString(); Clipboard.SetText( fullPath ); }
カスタムコマンドで MenuCommand クラスに設定するコールバックに
上記のコードを記述します
<Groups> <Group guid="guidCommand1PackageCmdSet" id="MyMenuGroup" priority="0x0600"> <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_ITEMNODE"/> </Group> <Group guid="guidCommand1PackageCmdSet" id="MyMenuGroup" priority="0x0600"> <Parent guid="guidSHLMainMenu" id="IDM_VS_CTXT_FOLDERNODE"/> </Group> </Groups>
<Buttons> <Button guid="guidCommand1PackageCmdSet" id="Command1Id" priority="0x0100" type="Button"> <Parent guid="guidCommand1PackageCmdSet" id="MyMenuGroup" /> <Strings> <ButtonText>完全パスのコピー</ButtonText> </Strings> </Button> </Buttons>
そして、.vsct ファイルの「Groups」と「Buttons」を上記のように設定します
これで、ソリューションエクスプローラで項目を右クリックした時に表示される
コンテキストメニューに「完全パスのコピー」が追加されて、
これを選択すると、そのファイルの完全パスをコピーすることができるようになります