VSTA 2015 1対応アプリを作成しています。
その中で、アセンブリをロードし、よく知られたメソッド (コンストラクター、それは問題ではありません) にアクセスし、それを呼び出し、それに COM オブジェクトを渡す必要があります (ラップアップされているため、自然に .net オブジェクトになります)。
これはうまくいきます。ここで、デバッグを有効にするために、アセンブリの読み込み元のプロセスが、VSTA サブシステムと対話するプロセスとは異なる必要があります。アプリケーションは VSTA サブシステムと対話します。つまり、アセンブリを個別のプロセスでロードする必要があります。
.net アセンブリを別のプロセスでロードし、com オブジェクト (または com オブジェクトをラップする .net オブジェクト) を既知のエントリ ポイントに渡す簡単な方法はありますか?
複雑な方法では、アセンブリをロードするカスタム .exe ローダーを作成し、IPC を使用して COM インターフェイスを取得し、ラップしてアセンブリに渡します。次に、IPC を使用してエラー メッセージを返します。どの種類の IPC を使用すればよいかわかりません。しかし、ここには多くの可動部品 (2 つの IPC システム、ローダー) があり、それらを使わずに簡単に実行できる方法があればいいのにと思います。
を見たSystem.Diagnostic.Process.Start
のですが、オプションの中に「アセンブリをプロセスとして開き、この.netオブジェクトを渡す」ことができないようです。
デバッガーがVSTA「スクリプト」プロセスにアタッチし、VSTA「ホスティング」プロセスをロックせずに一時停止/進行できるようにするには、別のプロセスが必要であるため、アパートメント(および同様の)はおそらく機能しません(ドキュメントではデッドロックにつながる可能性があります)。
それが重要な場合、アプリケーションはマネージド/アンマネージドが混在しています。マネージド コンポーネントのほとんどは C#、アンマネージド コンポーネントのほとんどは C++、インターフェイスのほとんどは C++/cli です。
1 VSTA 2015 は、Visual Studio IDE ワークフローがアプリケーション ワークフローと統合されている .net 言語の「スクリプトのような」環境のオンザフライ編集を可能にする Microsoft ソリューションです。これは基本的な点で VSTA 2012 以前とは異なることに注意してください。VSTA 2012 以前の情報や回答は、ここでは役に立たない可能性があります。