1

Visual Studio 2010 以降の C# でVSPackageを開発しています。このパッケージにより、ユーザーは IDE のメニューを介してパッケージの機能を有効/無効にすることができます (特に、IDE が行うこと)。

目標: パッケージ機能が有効になっているときに、いくつかの環境変数を発生させたいのですが、アプリケーションが「デバッグ モード」([デバッグ] > [デバッグの開始] [F5]) で実行されている場合にのみ設定されます。たとえば、VS_COOL_PKG_ENABLE=1

そして、このenv変数をデバッグ対象(デバッグ中のアプリケーション)に見えるようにしたいです。

うまくいかなかった解決策:

1.環境の変更: Environment.SetEnvironmentVariableを呼び出すと、パッケージが IDE (devenv.exe) のアドレス空間に存在し、VS デバッガー (msvsmon.exe) が別のプロセス (devenv の子プロセス) であるため、機能しませんでした。 .exe) は IDE の起動時にのみ作成されるため、親プロセス (IDE) で行った次の変更は VS デバッガーに反映されないため、アプリケーション (デバッガーの子プロセス) にはそれらが表示されません。同じように。

何故ですか?プロジェクトを「デバッグ モード」で実行すると、Debugee のプロセス ツリーは次のようになります: IDE (devenv.exe) > VS Debugger (msvsmon.exe) > Application

変更を加えるフェーズは (アプリが開始される直前): IDE (devenv.exe) > VS Debugger (msvsmon.exe)

そのため、「VS Debugger」は環境の変更を認識していません。

2.プロジェクト プロパティ: VCDebugSettings.Environment プロパティを使用して、ソリューション内のすべてのプロジェクトの "環境" 設定 (つまり、[プロジェクト プロパティ] > [構成プロパティ] > [デバッグ] > [環境]) をプログラムで変更することにより、回避策を見つけました。

ただし、このソリューションの短所は次のとおりです。

  • 環境変数は、ユーザーが "Starts with Debugging" (Ctrl+F5) を実行したときにも設定されます。
  • ユーザー設定を台無しにします。これはクリーンなソリューションではありません

要するに 、この環境変数を動的に上げたいのですが、ユーザーが「デバッグを開始」した場合にのみ上げます。

EnvDTE (Visual Studio オートメーション モデル) には、デバッグを開始する直前に環境変数を「注入」したり、VS デバッガー プロセス (msvsmon.exe) のコンテキストで関数を呼び出したりすることを可能にする API/イベントがあるかもしれません。環境変数を設定すると、アプリケーションが (デバッガーによって) 生成されると、変更が表示されます。

このようなハックを含む回答を喜んで受け入れます。

4

0 に答える 0