7

外部プロセスを開始し(を使用System.Diagnostics.Process)、標準入出力を介して通信することで、一部の作業を行うVisual Studioパッケージがあります。.exe現在、拡張機能を実際に展開するには明らかに機能しないハードコードへのパスがあります。.exe拡張機能を使用して をパッケージ化して配布する正しい方法は何ですか? (そして、関連して、インストールしたファイルへのパスをプログラムでどのように見つけるのですか。)できれば、インストールが簡単.exeになるようにファイルに入れたいと思います。.vsix

編集:コードの関連部分を BitBucket に配置しました (Roslyn を使用している他の人にとっては役立つかもしれません): roslyn_processは、私がやろうとしていることをよりよく理解するためです。AbstractProcessHandlerこのコードは、 の実装を使用する Visual Studio 拡張機能と、 を使用する別のプロセスとの間の通信をセットアップしRoslynProcessます。後者は、Visual Studio のコード ファイルへの変更と、どのコード ファイルが表示されているかを常に通知されるため、Visual Studio の拡張機能として実行されていなくても、最新の情報を使用して分析を行うことができます。編集中のすべてのコードの Roslyn。

EDIT 2: this answerを使用して、拡張機能のディレクトリを取得できます。source.extension.vsixmanifestタイプ「カスタム拡張タイプ」としてコンテンツリストに追加することにより、別のパッケージを含めることができます。次に、.exe拡張機能のディレクトリに表示されます。これはおそらく正しい解決策のようですが、ディレクトリを取得する方法は MSDN で使用すべきではないものとしてラベル付けされています。

ハックのように見えますが、これがこれを行うための最良の方法のようです。その場合、すべてが機能するようになったら、これを回答として投稿します。

4

1 に答える 1

7

これに対する最も簡単な方法の 1 つは、パッケージ DLL に EXE へのプロジェクト参照を持たせ、エントリ ポイント クラス (または EXE 内のクラス) をパブリックにすることです。次に、次のように書くことができます。

typeof(ExternalProcess).Assembly.Location

これにより、拡張パス内の EXE へのパスが得られます。

これに関するもう 1 つの優れた点は、VSIX パッケージャーが EXE を VSIX に自動的に含める必要があることです。これはプロジェクト参照であるためです。EXE の .vsixmanifest に何も入れる必要はありません。

于 2012-02-18T01:21:27.237 に答える