私はVisual Studioエクステンションを開発しています.NuGetのインストールまたはアンインストール後にいくつかのロジックを実行したいと思います。私がこれを監視できるイベントはありますか?私はIVsHierarchyインターフェイスでOnItemAddedとOnItemDeletedを試しましたが、ここでの問題は、ソリューションに追加または削除されるファイルの数のためにインストール/アンインストールごとに何度も実行されるということです。 NuGetプロセスが完了した後でイベントをトリガーしたいと思います。Visual Studio Extension - NuGetのインストール/アンインストール後のイベント?
答えて
Visual StudioでNuGet APIを使用して、PackageInstallingやPackageInstalledのようなNuGetイベントを聴くことができます。しかし、これらのイベントをバッチモードで使用し、NuGet IVsPackageInstallerProjectEventsインターフェイスからBatchStartとBatchEndを受信し、NuGetのパフォーマンスを低下させないようにしてください。
これらのAPIの詳細については、hereでNuGet blogpostをご覧ください。
BatchStartイベントを受信すると、PackageInstalling、PackageInstalledなどのIVsPackageInstallerEventsイベントを実行し、BatchEndイベントを受信した後にこれらイベントを適用することが理想的です。
Aashish - 例としていくつかのコードを提供できる方法はありますか?私は実際にこれを適切に結びつけるために苦労している。ありがとう! – bgeveritt
これは次のコードと同じくらい簡単です。 NuGet.VisualStudio最新パッケージ(v4.0.0-rc3-2137)を入手するには、https://dotnet.myget.org/F/nuget-build/api/v3/index.jsonをNuget Feedとして必ず使用してください。
[Import]
private IVsPackageInstallerEvents packageInstallerEvents;
[Import]
private IVsPackageInstallerProjectEvents packageInstallerProjectEvents;
private string currentBatchId;
private Dictionary<string, string> packagesMetadata;
public void BindNuGetPackageEvents()
{
packageInstallerProjectEvents.BatchStart += (projectMetadata) =>
{
// preserve current batch id or project name to compare with batch end event
currentBatchId = projectMetadata.BatchId;
Console.WriteLine("Current Project Name : " + projectMetadata.ProjectName);
};
packageInstallerEvents.PackageInstalled += (metadata) =>
{
// package being insalled in current project
// Save package metadata to use at batch end event
packagesMetadata.Add(metadata.Id, "installed");
};
packageInstallerEvents.PackageUninstalled += (metadata) =>
{
// package being uninstalled in current project
// Save package metadata to use at batch end event
packagesMetadata.Add(metadata.Id, "uninstalled");
};
packageInstallerProjectEvents.BatchEnd += (projectMetadata) =>
{
if (currentBatchId == projectMetadata.BatchId)
{
// Now you can use your packages metadata saved during packageinstalled or packageuninstalled events
foreach (var packageName in packagesMetadata.Keys)
{
Console.WriteLine(string.Format("Package {0} was {1}", packageName, packagesMetadata[packageName]));
}
}
};
}
- 1. Visual Studio Extension - プロジェクトルートフォルダ
- 2. Visual Studio 2010 Extensionの作成
- 3. Visual Studioでビルド後のイベントとして 'nuget add'を実行するには?
- 4. セットアッププロジェクトVisual StudioとNuget
- 5. Visual Studio Nugetのバージョン履歴
- 6. プロジェクトテンプレートDTEのVisual Studio 2017 nuget
- 7. Visual Studioプレビルドイベント/ビルド後のイベント作業ディレクトリ
- 8. Visual Studio 2010 Extension - イベントが呼び出されない
- 9. Visual Studio Extensionのコンテキストメニューにサブメニューを追加
- 10. Visual Studio 2010 - NuGetをアンインストール
- 11. Visual Studio VSIXテンプレートとNugetパッケージ
- 12. Visual Studioは、PCLフォーム - NuGet
- 13. Nuget PMのエラーVisual Studio Express v2013
- 14. Visial Studioプロジェクトアイコンリセット後のNugetアップデート
- 15. NugetパッケージのVisual Studioコミュニティ2015に関連
- 16. NuGetなしのコンピュータでNuGetリファレンスを使用するVisual Studioソリューション
- 17. Visual Studio 2010イベントの処理
- 18. Visual Studioコマンドプロンプトからnugetパッケージマネージャコンソールを実行
- 19. Visual Studio 2015コミュニティ - > cpprestsdk nugetパッケージ
- 20. Visual Studio 2015/2017ローカルNuGetフィードHTTP 403
- 21. Visual Studioで生成されたNugetファイル
- 22. ビルド後イベントを追加した後でVisual Studioがハングする
- 23. Visual StudioとUnityでMDBファイルを使用したビルド後のイベント
- 24. Visual Studio 2010 Extension内のプロジェクト/参照のリストを取得
- 25. Visual Studio SDK - ハンドルファイル保存イベント
- 26. Visual Studio - Subscribe Light Bulb clickイベント
- 27. Visual Studio Extension別のインスタンスでVisualDIffFilesが開きます
- 28. SettingsManager.GetWritableSettingsStoreはVisual Studio Extensionのインポート/エクスポートに使用できますか?
- 29. プロジェクトファイルタイプをVisual Studio Extension(VSIX)のプロジェクトタイプに関連付ける方法
- 30. 右クリックしたファイルのフルパスVsix(Visual Studio extension)
このようなイベントで何をしようとしていますか?すなわち、そのような出来事があったと想像してください、あなたはそれを何のために使うつもりですか? –
私は、ソリューションで利用されているパッケージに関する特定のメタデータを収集し、その情報をツールウィンドウに表示したいと考えています。私はもちろん、ボタンをクリックしてユーザーが手動でロジックを呼び出させるようにしても構いませんが、バックグラウンドでそれを実行する方法があることを期待していました。 – bgeveritt