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

时间:2013-12-11 08:35:49

标签: c# visual-studio

在Visual Studio中,向项目添加一个引用时,属性窗口有一个选项Embed Inteop Types,我们应该将其设置为True还是False?有什么区别?

由于我们有很多项目,其中一些项目的引用设置为False,其他项目设置为True,它完全搞乱了。并且bulid服务器也有相同的警告:

  

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

所以我们计划将所有Embed Inteop Types更改为False,我们会冒什么风险?

2 个答案:

答案 0 :(得分:69)

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

它只是嵌入了使用的托管桥接代码,允许您与非托管程序集进行通信,但它不是嵌入它而只是创建实际在代码中使用的东西。

阅读Scott Hanselman关于它和其他VS改进的博客文章中的更多内容here

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

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

答案 1 :(得分:7)

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