拡張機能を作りやすくする拡張機能が出ています。
VSIX Cookbook | Visual Studio Extensibility Cookbook
VSIX Project (Community)
テンプレートで作ります。
変更するのはVSIXProject1Package.cs
のみ、他はデフォルトのままです。
cs
1global using System;
2global using Community.VisualStudio.Toolkit;
3global using Microsoft.VisualStudio.Shell;
4global using Task = System.Threading.Tasks.Task;
5using System.Diagnostics;
6using System.Runtime.InteropServices;
7using System.Threading;
8using Microsoft.VisualStudio;
9using Microsoft.VisualStudio.Shell.Interop;
10
11namespace VSIXProject1
12{
13 [PackageRegistration(UseManagedResourcesOnly = true, AllowsBackgroundLoading = true)]
14 [InstalledProductRegistration(Vsix.Name, Vsix.Description, Vsix.Version)]
15 [ProvideMenuResource("Menus.ctmenu", 1)]
16 [Guid(PackageGuids.VSIXProject1String)]
17
18 // 追加(ソリューションを開いているときにこの拡張をロード)
19 [ProvideAutoLoad(VSConstants.UICONTEXT.SolutionExists_string, PackageAutoLoadFlags.BackgroundLoad)]
20 public sealed class VSIXProject1Package : ToolkitPackage
21 {
22 protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress<ServiceProgressData> progress)
23 {
24 Debug.WriteLine("InitializeAsync");
25
26 await JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken);
27
28 // 追加(イベントハンドラ追加)
29 VS.Events.BuildEvents.ProjectConfigurationChanged += BuildEvents_ProjectConfigurationChanged;
30 }
31
32 // 以下追加
33 private async void BuildEvents_ProjectConfigurationChanged(Project obj)
34 {
35 // 変わったことだけ分かればいいのならこれだけでいい
36 //VS.MessageBox.Show("ProjectConfigurationChanged", "何か変わりました");
37
38
39 // IVsProjectCfgを取るには今のところこうやるしかない?
40 await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
41
42 obj.GetItemInfo(out var hierarchy, out _, out _);
43 var projectConfig = new IVsProjectCfg2[1];
44
45 var svc = await VS.Services.GetSolutionBuildManagerAsync();
46 svc.FindActiveProjectCfg(IntPtr.Zero, IntPtr.Zero, hierarchy, projectConfig);
47
48 projectConfig[0].get_CanonicalName(out var name);
49
50 VS.MessageBox.Show("ProjectConfigurationChanged", name);
51 }
52 }
53}
現在絶賛開発中だと思うので、そのうちもっと簡単になるかもしれません。
VsixCommunity/Community.VisualStudio.Toolkit: Making it easier to write Visual Studio extensions
構成を取るのにかなりてこずりました^^;
わたしもしょうもない拡張機能をひとつ作ってるんですが、実例みたいのがあまりなくって苦労しますねぇ。
情報自体はDocsに全てあるんでしょうけど^^;
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/13 12:17