Jan*_*Jan 648 c# visual-studio-2010 visual-studio c#-4.0
我正在使用C#在.NET 4.0框架(beta2)上创建一个Web应用程序.
当我尝试使用名为"ActiveHomeScriptLib"的程序集时,出现以下错误:
无法嵌入Interop类型'ActiveHomeScriptLib.ActiveHomeClass'.请改用适用的界面.
当我将框架更改为3.5版时,我没有任何错误.
什么是互操作类型,为什么只有在我使用4.0框架时才会出现这种情况?
Jon*_*eet 1039
.NET 4.0允许将主互操作程序集(或者更确切地说,它所需的部分)嵌入到程序集中,这样您就不需要将它们与应用程序一起部署.
无论出于何种原因,这个组件都无法嵌入 - 但听起来这对你来说不是问题.只需在Visual Studio 2010中打开程序集的"属性"选项卡,并将"嵌入互操作类型"设置为"False".
编辑:另请参阅Michael Gustus的答案,Class从您正在使用的类型中删除后缀.
小智 469
在大多数情况下,此错误是尝试实例化COM对象的代码的结果.例如,这是一段启动Excel的代码:
Excel.ApplicationClass xlapp = new Excel.ApplicationClass();
Run Code Online (Sandbox Code Playgroud)
通常,在.NET 4中,您只需要删除"Class"后缀并编译代码:
Excel.Application xlapp = new Excel.Application();
Run Code Online (Sandbox Code Playgroud)
MSDN的解释在这里.
gid*_*eon 120
和Jan一样,我花了一段时间才得到它... = S所以对于那些因挫败感而蒙羞的人.
Jar*_*Par 32
扩展Jon的正确答案.
这里的问题是您将新的"嵌入互操作类型"(或NoPIA)功能与类类型的使用相结合."嵌入互操作类型"功能基本上通过静态链接PIA(主互操作程序集)中的所有类型到引用程序集,从而消除了部署它的开销.
此功能适用于PIA中的大多数类型,但它确实有限制.其中之一是你不能嵌入类(这是服务问题).Misha有一篇详细的博客文章,说明为什么不允许这样做
在将TFS项目下拉到本地计算机时遇到了这个问题.据称,它在编写它的人的机器上运行良好.我只是改变了这个......
WshShellClass shellClass = new WshShellClass();
Run Code Online (Sandbox Code Playgroud)
对此......
WshShell shellClass = new WshShell();
Run Code Online (Sandbox Code Playgroud)
现在,它像冠军一样工作!
| 归档时间: |
|
| 查看次数: |
347750 次 |
| 最近记录: |