【问题标题】:Why can I not use the interop assembly created by TLBIMP in .NET?为什么我不能在 .NET 中使用由 TLBIMP 创建的互操作程序集?
【发布时间】:2011-12-22 23:36:07
【问题描述】:

我有一个 .OCX 文件,我通过 Visual Studio 2010 工具 (tlbimp) 将其转换为互操作程序集。 当我想将创建的 DLL 添加到我的 .NET 项目时,我收到以下异常:

'DLLName.DLL',或其中一个依赖项,需要更高版本的 .NET Framework 比项目中指定的。你可以改变 .NET Framework 目标通过单击项目菜单上的属性 然后在“.NET Framework”下拉框中选择一个新目标。

有没有人有过这方面的经验?

【问题讨论】:

  • 那么,您的目标是什么版本的 .net?您在 tlbimp 中使用了哪些选项?可能它包含了一些 4.0“动态”的东西或可选参数,而您的目标不是 4.0。能说的具体点吗?
  • 我的项目基于 .NET framework 4.0 并且 tlbimp 没有指定 .NET framework 版本的选项。
  • 它是完整的框架吗?银光?客户资料?嗯?什么?
  • 您可以使用旧版框架附带的 tlbimp 版本...
  • 它是一个基于.NET 4的windows窗体项目。

标签: .net visual-studio-2010 c#-4.0 com com-interop


【解决方案1】:

我可以重现,虽然这并不容易:

获得它的唯一方法是从 Visual Studio 2010 命令提示符运行 Tlbimp.exe ,目标框架设置针对早期版本的 .NET。三重检查此设置。如果设置选择 .NET 4,则设置中存在严重问题。

更好的捕鼠器是使用 IDE 创建互操作库。项目 + 添加参考,浏览选项卡并在那里选择 .ocx 文件。当您现在更改目标框架时,互操作库会自动重新生成以匹配 CLR 版本。您可以通过在互操作库上运行 ildasm.exe 来仔细检查所有这些。双击清单,它会在第一行显示目标 CLR 版本:

// Metadata version: v4.0.30319
.assembly extern mscorlib
{
  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
  .ver 4:0:0:0
}

最后但同样重要的是,您确实希望将互操作库的“嵌入互操作类型”属性设置为 True,这样您就不必发布互操作库。如果您在“属性”窗口中找不到该属性,那么您还有另一个提示,即目标框架设置不是您认为的那样。

【讨论】:

    猜你喜欢
    • 2012-08-06
    • 2014-08-10
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 2019-11-03
    • 2011-02-09
    • 1970-01-01
    相关资源
    最近更新 更多