回答編集履歴

1

見直しキャンペーン中

2023/07/29 08:29

投稿

TN8001
TN8001

スコア9862

test CHANGED
@@ -1,139 +1,70 @@
1
1
  拡張機能を作りやすくする拡張機能が出ています。
2
-
3
2
  [VSIX Cookbook | Visual Studio Extensibility Cookbook](https://www.vsixcookbook.com/)
4
3
 
5
-
6
-
7
4
  `VSIX Project (Community)`テンプレートで作ります。
8
-
9
5
  変更するのは`VSIXProject1Package.cs`のみ、他はデフォルトのままです。
10
6
 
11
-
12
-
13
- ```C#
7
+ ```cs
14
-
15
8
  global using System;
16
-
17
9
  global using Community.VisualStudio.Toolkit;
18
-
19
10
  global using Microsoft.VisualStudio.Shell;
20
-
21
11
  global using Task = System.Threading.Tasks.Task;
22
-
23
12
  using System.Diagnostics;
24
-
25
13
  using System.Runtime.InteropServices;
26
-
27
14
  using System.Threading;
28
-
29
15
  using Microsoft.VisualStudio;
30
-
31
16
  using Microsoft.VisualStudio.Shell.Interop;
32
17
 
33
-
34
-
35
18
  namespace VSIXProject1
36
-
37
19
  {
38
-
39
20
  [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
40
-
41
21
  [InstalledProductRegistration(Vsix.Name, Vsix.Description, Vsix.Version)]
42
-
43
22
  [ProvideMenuResource("Menus.ctmenu", 1)]
44
-
45
23
  [Guid(PackageGuids.VSIXProject1String)]
46
24
 
47
-
48
-
49
25
  // 追加(ソリューションを開いているときにこの拡張をロード)
50
-
51
26
  [ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExists_string, PackageAutoLoadFlags.BackgroundLoad)]
52
-
53
27
  public sealed class VSIXProject1Package : ToolkitPackage
54
-
55
28
  {
56
-
57
29
  protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
58
-
59
30
  {
60
-
61
31
  Debug.WriteLine("InitializeAsync");
62
-
63
-
64
32
 
65
33
  await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
66
34
 
67
-
68
-
69
35
  // 追加(イベントハンドラ追加)
70
-
71
36
  VS.Events.BuildEvents.ProjectConfigurationChanged += BuildEvents_ProjectConfigurationChanged;
72
-
73
37
  }
74
38
 
75
-
76
-
77
39
  // 以下追加
78
-
79
40
  private async void BuildEvents_ProjectConfigurationChanged(Project obj)
80
-
81
41
  {
82
-
83
42
  // 変わったことだけ分かればいいのならこれだけでいい
84
-
85
43
  //VS.MessageBox.Show("ProjectConfigurationChanged", "何か変わりました");
86
44
 
87
45
 
88
-
89
-
90
-
91
46
  // IVsProjectCfgを取るには今のところこうやるしかない?
92
-
93
47
  await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
94
48
 
95
-
96
-
97
49
  obj.GetItemInfo(out var hierarchy, out _, out _);
98
-
99
50
  var projectConfig = new IVsProjectCfg2[1];
100
51
 
101
-
102
-
103
52
  var svc = await VS.Services.GetSolutionBuildManagerAsync();
104
-
105
53
  svc.FindActiveProjectCfg(IntPtr.Zero, IntPtr.Zero, hierarchy, projectConfig);
106
-
107
-
108
54
 
109
55
  projectConfig[0].get_CanonicalName(out var name);
110
56
 
111
-
112
-
113
57
  VS.MessageBox.Show("ProjectConfigurationChanged", name);
114
-
115
58
  }
116
-
117
59
  }
118
-
119
60
  }
120
-
121
61
  ```
122
-
123
62
  現在絶賛開発中だと思うので、そのうちもっと簡単になるかもしれません。
124
-
125
63
  [VsixCommunity/Community.VisualStudio.Toolkit: Making it easier to write Visual Studio extensions](https://github.com/VsixCommunity/Community.VisualStudio.Toolkit)
126
-
127
-
128
64
 
129
65
  ---
130
66
 
131
-
132
-
133
67
  構成を取るのにかなりてこずりました^^;
134
68
 
135
-
136
-
137
69
  わたしもしょうもない拡張機能をひとつ作ってるんですが、実例みたいのがあまりなくって苦労しますねぇ。
138
-
139
70
  情報自体はDocsに全てあるんでしょうけど^^;