2013-12-11 9 views
82

Visual Studioでは、プロジェクトへの参照を1つ追加すると、プロパティウィンドウにはというオプションがあります。TrueまたはFalseに設定する必要がありますか?違いは何ですか?違いの設定Visual StudioでInterop型をtrueとfalseで埋め込む?

私たちは多くのプロジェクトを持っているので、それらの中には参考文献がFalse、その他がTrueに設定されています。そしてbulidサーバーも同じ警告があります

What does “reference was created to embedded interop assembly” mean?

だから我々は、我々がどのようなリスクになるだろう、すべてのEmbed Inteop TypesFalseに変更する予定?

+3

決してこれを実行しないでください。これは非常に素晴らしい機能であり、厄介な展開の詳細を解決します。あなたは、これがすべてであることを真に疑うためにCOMを理解しなければなりません。 –

+0

@HansPassant、あなたはそれらを 'false'に設定したり、決して変更しないと言っていますか? – noelicus

+1

彼はFalseに設定する予定です。決してこれをしないでください。 –

答えて

55

このオプションは、interop用に非常に大きなPIA(プライマリ相互運用機能アセンブリ)を展開する必要性を排除するために導入されました。

管理されていないアセンブリと通信できるようにする管理されたブリッジングコードを単純に埋め込みますが、すべてを埋め込むのではなく、コードで実際に使用するものだけを作成します。

続きを読むScott Hanselmanのブログ記事、それと他のVS改善についてhere

アドバイスがあるかどうかは、この機能を使用する必要がないためわかりません。迅速なウェブ検索は、いくつかのリードを得られます。

falseにそれらすべてを回すだけリスクがPIAファイルで複数の展開懸念や、それらのいくつかの場合、より大きな展開ですファイルは大きいです。

+1

Embed Interop Types *をオフにすると、既存のコードを破損する可能性があることにはかなり大きな違いがあることに注意してください。違いは[ここ](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/interop/how-to-access-office-onterop-objects)に記載されています:* "C#4、およびそれ以降のバージョンでは、アセンブリが/ linkコンパイラオプションによって参照される場合、またはExcel埋め込みInterop Typesプロパティがtrueに設定されている場合は、返されたObjectを動的に自動的に変換します。 trueはこのプロパティのデフォルト値です。 "* –

6

私は、falseに設定されていると、デバッガを使用してアイテムの値を確認できることに気付きました。 trueに設定されたとき、エラーが発生しました。-item.FullName.GetValue埋め込みinteropタイプ 'FullName'には、コンパイルされたアセンブリで使用されなかったため、 'QBFC11Lib.IItemInventoryRet'の定義が含まれていません。オブジェクトにキャストするか、「Interop Interop Types」プロパティをtrueに変更してください。

関連する問題