有什么区别设置在Visual Studio中嵌入Interop类型是真还是假?

Jer*_*ian 110 c# visual-studio

在Visual Studio中,当向项目添加一个引用时,属性窗口有一个选项Embed Inteop Types,我们应该将其设置为TrueFalse?有什么不同?

由于我们有很多项目,其中一些项目已经设置参考False,其他项目设置为True,它完全搞砸了.并且bulid服务器也有相同的警告:

"为嵌入式互操作程序集创建引用"是什么意思?

因此,我们打算改变所有的Embed Inteop TypesFalse,我们会得到什么风险?

Ada*_*rth 73

引入此选项是为了消除为互操作部署非常大的PIA(主互操作程序集)的需要.

它只是嵌入了所使用的托管桥接代码,允许您与非托管程序集进行通信,但不是将其全部嵌入,而是仅创建实际在代码中使用的内容.

阅读更多斯科特Hanselman的博客文章关于它和其它VS改善这里.

至于是否建议,我不确定,因为我不需要使用此功能.快速网络搜索会产生一些线索:

将它们全部变为false的唯一风险是PIA文件的部署问题更多,如果其中一些文件很大则部署更大.

  • 嵌入式互操作程序集在基于插件的系统中给我带来了麻烦,其中主机和插件都依赖于相同的 *COM* 对象。另一个问题是将此类程序集与 *ILMerge* 合并。 (2认同)

use*_*332 8

我注意到,当它设置为false时,我能够使用调试器查看项目的值.当它设置为true时,我收到错误 - item.FullName.GetValue嵌入式互操作类型'FullName'不包含'QBFC11Lib.IItemInventoryRet'的定义,因为它未在编译的程序集中使用.考虑转换为对象或将"嵌入互操作类型"属性更改为true.