在Visual Studio中,向项目添加一个引用时,属性窗口有一个选项Embed Inteop Types
,我们应该将其设置为True
还是False
?有什么区别?
由于我们有很多项目,其中一些项目的引用设置为False
,其他项目设置为True
,它完全搞乱了。并且bulid服务器也有相同的警告:
What does “reference was created to embedded interop assembly” mean?
所以我们计划将所有Embed Inteop Types
更改为False
,我们会冒什么风险?
答案 0 :(得分:69)
引入此选项是为了消除为互操作部署非常大的PIA(主互操作程序集)的需要。
它只是嵌入了使用的托管桥接代码,允许您与非托管程序集进行通信,但它不是嵌入它而只是创建实际在代码中使用的东西。
阅读Scott Hanselman关于它和其他VS改进的博客文章中的更多内容here。
至于是否建议,我不确定,因为我不需要使用此功能。快速网络搜索会产生一些线索:
将它们全部变为false的唯一风险是PIA文件的部署问题更多,如果其中一些文件很大,则部署更大。
答案 1 :(得分:7)
我注意到当它设置为false时,我能够使用调试器查看项目的值。 当它设置为true时,我收到错误 - item.FullName.GetValue嵌入式互操作类型'FullName'不包含'QBFC11Lib.IItemInventoryRet'的定义,因为它未在编译的程序集中使用。考虑转换为对象或将“嵌入互操作类型”属性更改为true。