Visual StudioでEmbed Interop Typesをtrueとfalseに設定する違いは何ですか?


121

Visual Studioで、プロジェクトへの一つの基準を追加するとき、プロパティウィンドウがオプションを持ってEmbed Inteop Types、我々はそれを設定する必要がありますTrueFalse?違いは何ですか?

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

「参照が埋め込まれた相互運用機能アセンブリに作成された」とはどういう意味ですか?

我々は、すべての変更を計画してEmbed Inteop TypesまでFalse、私たちはどのような危険になるだろうか?


4
これを行わないでください。これは、厄介な展開の詳細を解決する非常に素晴らしい機能です。これが何であるかを本当に理解するには、COMを理解する必要があります。
Hans Passant

@HansPassant、それらを設定しfalseたり変更したりしないでください(たとえば、デフォルトになっfalseている場合)。
noelicus 14

2
彼はそれをFalseに設定する予定です。絶対にしないでください。
ハンスパッサント2014

3
@HansPassantどうしてirksomeとgrokを使うのですか。それは非常にブリッティッシュです:D
マフィイ

4
@Mafiiグロクはストレンジャーインストレンジランド(アメリカ人)だと思った。もちろん、イギリスがそれをこれ以上使用しない可能性があるという意味ではありません!
UuDdLrLrSs 2017年

回答:


79

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

アンマネージアセンブリと通信するために使用するマネージブリッジコードを埋め込むだけですが、すべてを埋め込むのではなく、実際にコードで使用するものだけを作成します。

これと他のVSの改善については、スコットハンセルマンのブログ投稿をご覧ください

助言されるかどうかについては、この機能を使用する必要がないのでわかりません。クイックWeb検索でいくつかのリードが得られます。

それらをすべてfalseにする唯一のリスクは、PIAファイルのデプロイメントに関する懸念が高まり、ファイルの一部が大きい場合はデプロイメントが大きくなることです。


1
Embed Interop Typesをオフにすると、既存のコードが壊れる可能性があるかなり大きな違いがあることに注意してください。違いは次のとおりです「C#4以降のバージョンでは、アセンブリが/ linkコンパイラオプションで参照されている場合、またはExcelの組み込みの相互運用型プロパティがtrueに設定されている場合、返されたオブジェクトが自動的に動的に変換されます。このプロパティのデフォルト値はTrueです。」
Dirk Vollmar 2018年

埋め込まれた相互運用機能アセンブリは、ホストとプラグインの両方が同じCOMオブジェクトに依存しているプラ​​グインベースのシステムで問題を引き起こしました。別の問題は、そのようなアセンブリをILMergeとマージすることでした。
Ant_222

8

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.