2016-06-24 3 views
0

私は知っているが、私には負担がかかります:-)私は現在、いくつかのカスタムコマンドを含むPoShモジュールを作成しています。以前は私がやりたいことをするために以前はPoSh Advanced Moduleを書いていましたが、飛び込んでC#を学ぶ時が来たと私は決めました!非GACアセンブリからの未知のクラスのインスタンスを作成する

私のコマンドの1つは、サードパーティのSDKアセンブリに含まれるクラスのインスタンスを作成する必要があります。そのアセンブリはGACに含まれていません。私のPoSh Advanced Functionでは、以前に、レジストリキーを照会してSDKがインストールされていることを確認し(そしてパスを取得する)、System.Reflection.Assembly.LoadFileを使用してアセンブリをロードします。

私のC#バージョンでは、私の計画は似たようなことをすることでした。私は、レジストリを照会し、アセンブリが存在することを確認し、それをロードすることさえ管理しました。しかし、アセンブリはVisual Studioで参照されていないため、そのアセンブリからクラスをインスタンス化しようとすると、インテリセンスエラーが発生します。私は当初Activatorクラスから何かを使用してこれを回避する必要があるかもしれないと思っていましたが、そこのすべてのメソッドを実行していて何か助けになるものは見つかりませんでした。

もう少し熟考した後、おそらく私のアプローチが間違っているのだろうかと思っていました。おそらく、私は "マニュアル"ローディングをしてはならないでしょう。アセンブリ。しかし、その場合、ターゲット/起動マシンのどこに(またはそれがインストールされていても)VSのアセンブリを参照する方法はありますか?

私の元のアプローチが正しい場合、どのようにしてVSをとても不幸にすることなく "手動で"(またはそうでなければ)クラスをインスタンス化するのですか?マシン上のアセンブリに「一時的な」参照を追加することを検討しましたが、小売ビルドを行う前に再度削除する必要があると思います。私は、私が推測するディレクティブを使って一時的に追加する必要もあります。

私はこれをかなり探知しましたが、私を助けてくれるものは何も見つかりませんでした。だから私は本当に誰でも提供できる指導に感謝します。おそらく、私はApp Domainのような、まったく別のものを見ているべきでしょうか? dynamic型変数にCreateInstance方法とストア結果を使用してアセンブリロードした後、事前

+0

組み込みリソースとしてdllをまだ接続しようとしましたか? –

+0

組み込みリソースに関する経験はありませんでしたが、素早くGoogleから、基本的には自分のソリューションにバンドルされているアセンブリだと思いますか?私の場合は、第三者アセンブリのSDKがアプリケーションにインターフェイスを提供するため、これはうまくいかないでしょう。 SDKアセンブリはアプリケーションの一部としてインストールされるので、アセンブリを私のモジュールにバンドルすることは、インストールされているアプリケーションに依然として依存するため、価値がありません。コメントのおかげで、あなたが私のような初心者のときは助けになる:-) –

答えて

0

ありがとう:

dynamic test = assembly.CreateInstance("Full.Type.Name"); 

あなたはインテリセンス得ないだろうが、コンパイラは、この変数は、すべての操作をサポートしていることを前提とします。注意してください。無効な操作は、実行時にのみエラーになります。

+0

>>インテリセンスは得られませんが、コンパイラはこの変数がどの操作もサポートしていると想定します。注意してください。無効な操作は、実行時にのみエラーになります。 私はintellisenseにならないだろうと思っていました。ヒントをありがとう、私はそれを試して、ポストバックする –

関連する問題