无法从程序集中嵌入互操作类型

Cannot Embed Interop Types from Assembly

我知道以前有人在这里问过类似的问题,但我不确定他们是否真的解决了我的问题,除非我误解了他们。

我今天早上一直在处理一个应用程序,在构建或重建解决方案时没有遇到任何问题,但是在我吃完午饭然后回来后(我让程序保持打开状态),我突然无法构建它,因为它返回 3 个错误,我以前没有遇到过类似的错误。

错误 1:

Cannot embed interop types from assembly 'office' because it is missing either the 'ImportedFromTypeLib' attribute or the 'PrimaryInteropAssembly' attribute.

错误 2:

Cannot embed interop types from assembly 'office' because it is missing the 'Guid' attribute

错误 3:

Unable to load referenced library 'C:\WINDOWS\assembly\GAC_MSIL\Office.0.0.0__71e9bce111e9429c\Office.dll': The system cannot find the file specified. C:\WINDOWS\assembly\GAC_MSIL\Office.0.0.0__71e9bce111e9429c\Office.dll

突然出现这些错误的原因是什么?

检查项目属性 > 引用 > 添加 > COM 后,我可以看到引用了 Office 15.0 对象库。那我该怎么办?在应用程序打开时出现它们似乎很奇怪?

只是为了在永恒的余下时间以及对于任何有相同问题的潜在未来用户而言,这不是未标记的,正如@soohoonigan 和@TnTinMn 所建议的那样,答案是:

  • 清理并重建解决方案。
  • 如果这不起作用,请删除引用,然后重新添加。

我相信这不是答案。您可能已在程序集属性 window 至 'true' 中标记了嵌入互操作类型。通过删除和添加引用,您已将其设置回默认值,即 'false'.

默认是"true",不是"false"。因此,通过删除它并再次添加它,您将其设置为 "true".

仅看到错误 1 ​​和 2,在此处的答案和一些进一步研究的指导下,为我解决问题的是:

参考 -> Microsoft.CSharp -> 属性 - 将 'Embed Interop Types' 更改为 'False' 然后重建。

实际问题是您的解决方案中的引用设置为将互操作类型嵌入目标程序集!只需检查您的引用的属性并将所有标记为 false 的属性设置为 false。