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

12

我知道这里之前有类似的问题,但我不确定它们是否真正解决了我的问题,除非我误解了它们。

今天早上,我一直在开发应用程序,并没有遇到任何构建或重新构建解决方案的问题,但是在午餐后回来(我让程序保持打开状态),我突然无法构建它,因为它返回了三个错误,我以前没有遇到过这样的错误。

错误1:

无法从程序集 'office' 嵌入互操作类型,因为它缺少 'ImportedFromTypeLib' 特性或 'PrimaryInteropAssembly' 特性。

错误2:

无法从程序集 'office' 嵌入互操作类型,因为它缺少 'Guid' 特性。

错误3:

无法加载引用库 'C:\WINDOWS\assembly\GAC_MSIL\Office\15.0.0.0__71e9bce111e9429c\Office.dll': 系统找不到指定的文件。C:\WINDOWS\assembly\GAC_MSIL\Office\15.0.0.0__71e9bce111e9429c\Office.dll

是什么导致这些错误突然出现?

在检查项目属性>引用>添加>COM后,我可以看到引用了Office 15.0对象库。那我该怎么办?它只是看起来很奇怪,因为这些错误出现在应用程序打开的同时?


在您的系统上,dir C:\WINDOWS\assembly\GAC_MSIL\Office\15.0.0.0__71e9bce111e9429c\Office.dll 的输出是什么(即所引用的文件是否实际存在)? - Dirk Vollmar
2
我曾经遇到过这个异常,它突然在调试版本中出现了。最后我所做的就是Build>Clean解决方案,然后再Build>Rebuild它,异常就消失了,你也可以试试。 - soohoonigan
2
如果@soohoonigan的建议不起作用,删除Office引用,然后再添加。 "找不到文件"错误让我想知道你午餐时IT部门是否运行了一些更新。 - TnTinMn
@TnTinMn 谢谢,这个修复了,不太确定发生了什么,但现在它正常工作了。 - David
5个回答

16

为了避免这个问题被荒废并为任何以后可能遇到相同问题的用户提供帮助,建议像@soohoonigan和@TnTinMn所建议的那样:

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

我尝试了但不起作用,我的错误在于嵌入来自microsoft.visualstudio.shell.interdrop的interdrop类型,因为它缺少interdropservices.guidattribute:/ 我不知道这很有趣:D 我尝试在属性中关闭嵌入interdrop功能。 - Çağlar Can Sarıkaya

5

只看到错误1和2,根据这里的回答和进一步的研究,解决我的问题的方法是:

引用 -> Microsoft.CSharp -> 属性 - 将 'Embed Interop Types' 改为 'False' 然后重新构建。


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

3

我认为这不是答案。可能你已经在程序集属性窗口中将“嵌入互操作类型”标记为“true”。通过删除并重新添加引用,您已将其恢复为默认值,即“false”。


2
默认值是“true”,而不是“false”。因此,通过删除并重新添加它,您将其设置为“true”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接