在 VisualStudio 中设置嵌入互操作类型 true 和 false 的区别是什么?

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

由于我们有很多项目,其中一些,参考被设置为 False,其他被设置为 True,这是完全混乱。构建服务器也有相同的警告:

“引用创建到嵌入式互操作程序集”是什么意思?

因此,我们计划将所有的 Embed Inteop Types改为 False,我们会有什么风险?

113044 次浏览

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

它只是简单地嵌入了允许您与非托管程序集对话的托管桥接代码,但是它没有全部嵌入,而是仅仅创建了您在代码中实际使用的内容。

在 Scott Hanselman 的博客文章中了解更多关于它和其他 VS 改进的内容: CLR、 DLR 和 BCL,天哪!-围绕.NET4(和 VisualStudio2010) Beta 1的旋风之旅

至于是否建议使用,我不确定,因为我不需要使用这个特性。快速的网络搜索会得到一些线索:

将它们全部变为虚假的唯一风险是对 PIA 文件的更多部署担忧,如果其中一些文件很大,则需要进行更大的部署。

我注意到,当它设置为 false 时,我可以使用调试器查看项的值。 当设置为 true 时,我得到了一个错误项。全名。GetValue 嵌入式互操作类型‘ FullName’不包含‘ QBFC11Lib.IItemInventoryRet’的定义,因为它没有在编译的程序集中使用。考虑强制转换为对象或将“嵌入互操作类型”属性更改为 true。