2012-02-08 13 views
5

私はVisual Studioパッケージを使用して、外部プロセス(System.Diagnostics.Processを使用)を開始し、標準入出力で通信します。現時点では、私は実際に拡張機能を展開するためには明らかに実行できないハードコードされた.exeへのパスを持っています。拡張子付きで.exeをパッケージ化して配布する正しい方法は何ですか? (そして、これを済ませたら、インストールされた.exeファイルへのパスをプログラムでどのように発見するのでしょうか?)好ましくは、インストールを容易にするために.vsixファイルに入れたいと思います。.vsixに.exeをパッケージ化し、Visual Studioの拡張機能から呼び出します。

編集:私が何をしようとしています何の良いアイデアを与えるためにroslyn_process私はのBitbucket上の私のコードの関連部分を(それがロズリンを使用して他の誰かに有用である可能性がある)に置かれています。このコードは、AbstractProcessHandlerの実装を使用するVisual Studio拡張と、RoslynProcessを使用する別のプロセスとの間の通信を設定します。後者には、Visual Studioのコードファイルの変更が通知され、コードファイルが表示されているため、Visual Studio拡張機能として実行されていないにもかかわらず、最新の情報を使用して分析を行うことができます。編集中のすべてのコードにRoslyn

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

hackishのように見えるかもしれませんが、これが最良の方法であると思われます。

+1

@Kiquenet:申し訳ありませんが、私はきれいにパッケージ化された最小限のソリューションを持っていません...しかし、受け入れられた答えは1ライナーです。 – perelman

答えて

5

これに最も簡単なアプローチの1つは、パッケージDLLにEXEへのプロジェクト参照があり、エントリポイントクラス(またはEXE内のいくつかのクラス)を公開することです。次に、あなたはあなたの拡張パスの中のEXEへのパスを与える:

typeof(ExternalProcess).Assembly.Location 

この他の素晴らしい点は、VSIXパッケージャはプロジェクト参照であるため、EXEをVSIXに自動的に組み込むことです。 EXEの.vsixmanifestに何も置く必要はありません。

+0

私はこれを試したときに:EXE(NancyFXを参照しています)を含めて、NancyFXが強い名前ではなく、ビルドに失敗したと言いました。 –

+0

「それ」とは何ですか?いずれにしても、ここで別の質問を開始するのは、これに関する会話よりはるかに適切です。 –

+0

私は質問がありません - 私は警告があります:VS 2012 SDKを使用してVSPackageを作成するとき、テンプレートは強力な命名が可能なプロジェクトを作成します。そのプロジェクトの他のものを参照する場合は、厳密な命名は推移的であるため、厳密な名前を付ける必要があります。 –

関連する問題