Answers:
.NET 4.0允许将主互操作程序集(或更确切地说,您需要的互操作程序集)嵌入到程序集中,因此您无需将它们与应用程序一起部署。
无论出于何种原因,都无法嵌入该程序集-但是听起来这对您来说不是问题。只需在Visual Studio 2010中打开程序集的“属性”选项卡,然后将“嵌入互操作类型”设置为“ False”。
编辑:另请参阅Michael Gustus的答案,Class
从您使用的类型中删除后缀。
embed interop types
属性起到false
了作用。就我而言-我正在使用Microsoft.Office.Interop.Excel
库,需要访问Workbook对象。使用它的界面Workbook
(顺便说一句命名约定...)不是一种选择-我收到的COM object
不是所希望的Microsoft.Office.Interop.Excel.WorkbookClass
在大多数情况下,此错误是试图实例化COM对象的代码的结果。例如,以下是启动Excel的一段代码:
Excel.ApplicationClass xlapp = new Excel.ApplicationClass();
通常,在.NET 4中,您只需要删除'Class'后缀并编译代码:
Excel.Application xlapp = new Excel.Application();
MSDN的解释在这里。
像Jan一样,我花了一段时间才得到它。.= S所以对于任何对挫折视而不见的人来说。
扩展乔恩的正确答案。
这里的问题是您正在将新的“嵌入式互操作类型”(或NoPIA)功能与类类型结合使用。“嵌入式互操作类型”功能通过将所有类型从PIA(主互操作程序集)静态链接到引用程序集而工作,从而消除了部署它的开销。
此功能对PIA中的大多数类型都适用,但确实有一些限制。其中之一是您不能嵌入类(这是一个服务问题)。Misha有一篇详细的博客文章,介绍了为什么不允许这样做
得到了解决方案
转到引用,右键单击所需的dll,您将获得“嵌入的互操作类型”选项为“假”或“真”。
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
发生此错误的原因是,新项目中引用的TestStand API Interop程序集的Embed Interop Types属性的默认值为true。若要解决此错误,请按照下列步骤操作,将Embed Interop Types属性的值更改为False:在解决方案资源管理器中,在项目的引用部分中选择TestStand Interop程序集引用。在属性浏览器中找到“嵌入互操作类型”属性,并将其值更改为False。
Visual Studio 2017 15.8版使得可以使用PackageReferencesyntax引用Visual Studio可扩展性(VSIX)项目中的NuGet程序包。这使得对NuGet程序包的推理变得更加容易,并为拥有包含整个VSSDK的完整元程序包打开了大门。
在NuGet软件包下面安装将解决EmbedInteropTypes问题。
安装包Microsoft.VisualStudio.SDK.EmbedInteropTypes