Visual studio 2010 Visual Studio 2010,TlbImp在2.0项目中生成.net 4.0互操作

Visual studio 2010 Visual Studio 2010,TlbImp在2.0项目中生成.net 4.0互操作,visual-studio-2010,interop,tlbimp,Visual Studio 2010,Interop,Tlbimp,在C#项目中,我们通过指向COM对象的addreferences设置添加对COM对象的引用,这将导致IDE自动生成互操作程序集。这很好,但我们是基于.NET3.5SP1(也称CLR2.0)构建的,生成的互操作使用4.0CLR,使它们不兼容。有没有办法防止这种情况 我假设另一个选项是配置构建脚本,以尝试使用带有/references参数的tlbimp.exe?指向mscorlibv2.0 无论如何,我希望在某个地方有一个标志允许这样做。我正好遇到了这个问题。我找到的解决方案是使用.Net Fram

在C#项目中,我们通过指向COM对象的addreferences设置添加对COM对象的引用,这将导致IDE自动生成互操作程序集。这很好,但我们是基于.NET3.5SP1(也称CLR2.0)构建的,生成的互操作使用4.0CLR,使它们不兼容。有没有办法防止这种情况

我假设另一个选项是配置构建脚本,以尝试使用带有/references参数的tlbimp.exe?指向mscorlibv2.0


无论如何,我希望在某个地方有一个标志允许这样做。

我正好遇到了这个问题。我找到的解决方案是使用.Net Framework SDK(或Windows平台SDK?)的tlbimp版本3.5,该SDK位于使用CLR 2的%ProgramFiles%\Microsoft SDK\Windows\v6.0A\bin中

我还发现我需要这些信息才能从导入的exe文件中获取正确的类型库,因为VS只使用第一个类型库:

“从包含多个类型库的模块导入类型库时,可以选择将资源ID附加到类型库文件。”

tlbimp MyModule.dll\1


中,我遇到了同样的问题,但即使使用tlbimp.exe的v2.0,我仍然得到一个4.0 dll,它无法工作。
我最终得到了一个更简单的解决方案,以防有人遇到这种情况:
使用regsvr32注册dll(确保以管理员身份运行,否则会出错),然后在项目中添加引用时,您将在COM选项卡中找到dll。
工作得很有魅力


除非您希望创建interop dll以将其与应用程序一起提供,否则您需要确定tlbimp.exe路由。

问题的解决方案是将tlbimp.exe配置为在2.0.NET运行时版本下运行

  • 转到C:\Program Files(x86)\Microsoft SDK\Windows\v7.0A\Bin并打开tlbimp.exe.config文件
  • 在“配置”部分的文件中添加以下行:

    <startup>
       <supportedRuntime version="v2.0.50727"/>
    </startup>
    
    
    
  • 保存文件,然后像平常一样运行tlbimp.exe可执行文件


  • 如果您正在使用生成事件,请尝试以下操作:

    "$(SDK35ToolsPath)tlbimp" tlbimp arguments
    
    $(SDK35ToolsPath)指向C:\Program Files(x86)\Microsoft SDK\Windows\v7.0A\Bin

    如果要引用4.0,则$(SDK40ToolsPath)是指向C:\Program Files(x86)\Microsoft SDK\Windows\v7.0A\Bin\NETFX 4.0 Tools的宏

    在VS 2010命令行中,“where tlbimp”将首先显示NETFX 4.0 Tools文件夹中的tlbimp.exe。所以我们需要$(SDK35ToolsPath)用于3.5tlbimp.exe。

    只需运行

    C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\TlbImp.exe
    
    要为我生成interops库.Net 2.0版(Visual Studio 2013),只需使用正确的TlbImp可执行文件即可

    找出默认情况下您正在使用的:

    其中tlbimp

    对我来说是

    C:\ProgramFiles(x86)\Microsoft SDK\Windows\v8.1A\bin\NETFX 4.5.1 Tools\TlbImp.exe

    例如,使用较低版本的

    C:\ProgramFiles(x86)\Microsoft SDK\Windows\v7.0A\Bin\tlbimp


    它为我生成了一个.NET2程序集,无需编辑配置文件。您可以在exe上使用CorFlags来确定它使用的.Net版本。或者您可以在输出上使用Corflags。

    这在Windows 10版本的SDK/tlbimp、fwiw中不起作用。它提供有关无效并排配置的错误。否则,答案很好!