2011-10-17 45 views
2

私が書いたアプリケーションは、Component Object Modelライブラリを介してサードパーティのアプリケーションと通信しています。 Visual Studioプロジェクト内でこのCOMライブラリを参照する必要があります。 COMライブラリと通信するためには、Visual Studioプロジェクトで参照する必要がある.NETラッパーライブラリもあります。条件付きリファレンス

クラスの条件付き初期化を作成して、.NETラッパーライブラリ内の.NETクラス内のメソッドを使用する方法があります。これは、サードパーティの新しいバージョンで動作しますCOMライブラリそのもの。

私が遭遇した問題は、それ以降のバージョンにのみ存在していたCOMライブラリの機能を参照しようとしていたことです。ラッパー自体のバージョンは、下位互換性があるため同一でした。この新しい機能にアクセスしようとしたとき、以前のバージョンのサードパーティ製アプリケーションがインストールされたときに、私が作成したプログラムが起動したときに、私が書いていたプログラムが黙って閉じることになりました。

アプリケーション自体の作成方法を変更せずにこの動作を回避できる方法はありますか?

+0

私はこれについてお話することができますが、その投稿はあなたが探している答えではありません。それは受け入れられた答えです、それはたくさんの票を持っています、あなたはちょっとそれにこだわっています。ただ別の質問をしてください。 –

+0

さて、難解で人気のない答えが正しい質問に合っているかどうかを決定しましょう。これは法案に適合しません、それはあまりにも多くを仮定します。あなたは自分自身を発見しました。「それは可能でなければならない」という要求から「どのようにしてその仕事をすることができるか」という要求を緩和します。完全に知名度があります。 –

+0

あなたは質問を改善しませんでした。 –

答えて

12

私が用語「クラスを参照する」を理解しているかどうかは不明です。

あなたがcsprojファイルでMSBuild Conditionを使用してプロジェクト

<Compile 
     Include="LegacyServices.cs" 
     Condition="$(AppVersion == '2.0')" /> 

両方に

<Reference 
     Include="LegacyServices.dll" 
     Condition="$(AppVersion == '2.0')" /> 

または条件は、ソースファイルが含まれるアセンブリ全体(DLL)の条件付きの参照を行うことができます。

+0

あなたが掲示したものは動作しません。条件はboolの代わりに ''と評価されます。あなたが参照しているmsdnページでさえ、 '$(AppVersion)== '2.0' 'でなければならないと言います。また、そのようなリファレンスは、Visual Studio(条件が偽であっても参照が表示されます)を混乱させる一方、[その回答](http://stackoverflow.com/a/6523223/800613)はVisual Studioでうまく動作します。 – Atomosk

+0

試してみてくださいCondition = "'$(AppVersion)' == '2.0'" – sll

+0

それもうまくいくでしょうが、私はVisual Studioがそれをどのように扱うのか分かりませんし、 ''それは私が持っている複数の条件付き参照の方がはるかに優れています。 – Atomosk