Visual Studio 2010,TlbImp在2.0项目中生成.NET 4.0互操作性。

18
在 C# 项目中,我们通过添加引用指向一个 COM 对象来添加对其的引用。这将导致IDE自动生成互操作程序集。这很好,但我们基于 .NET 3.5 SP1(也称为 CLR 2.0)进行构建,生成的互操作程序集使用的是 4.0 CLR,从而使它们不兼容。有没有办法防止出现这种情况?
我认为另一个选择是配置我们的构建脚本尝试使用 tlbimp.exe,并使用 / references 参数来指向 mscorlib v2.0?
无论如何,我希望能找到一个标志来允许这样做。
6个回答

21

我也遇到了这个问题。我找到的解决办法是使用来自.Net Framework SDK(或Windows Platform SDK?)中使用CLR 2的版本3.5的tlbimp,位于%ProgramFiles%\Microsoft SDKs \ Windows \ v6.0A \ bin。

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

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

tlbimp MyModule.dll \ 1

来自http://msdn.microsoft.com/en-us/library/tt0cf3sx%28VS.80%29.aspx


14

解决这个问题的方法是配置tlbimp.exe在2.0 .NET运行时版本下运行。

  1. 进入C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin并打开tlbimp.exe.config文件。
  2. 在配置部分中添加以下行:

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


这在 Windows 10 版本的 SDK/tlbimp 上不起作用,顺便说一下。它会出现关于无效的并行配置的错误。否则,回答很好! - Mahmoud Al-Qudsi

5

如果你正在使用构建事件,请尝试以下方法:

"$(SDK35ToolsPath)tlbimp" tlbimp arguments
$(SDK35ToolsPath)指向C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin。
如果您想引用4.0,$(SDK40ToolsPath)是一个宏,指向C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools。
在VS 2010命令行中,"where tlbimp"会首先显示NETFX 4.0 Tools文件夹中的tlbimp.exe。因此,我们需要$(SDK35ToolsPath)来获取3.5的tlbimp.exe。

2
我遇到了完全相同的问题,但即使使用tlbimp.exe的v2.0版本,我仍然得到了一个不可用的4.0 dll。
最终我找到了一个更简单的解决方案,以防有人遇到类似问题:
使用regsvr32注册dll(确保您以管理员身份运行,否则会出错),然后在项目中添加引用时,您可以在COM选项卡中找到您的dll。
像魔法一样好用!
除非您想创建interop dll并将其与应用程序一起发布,否则您需要找出tlbimp.exe的路线。

2
对于我来说(Visual Studio 2013),只需要使用正确的TlbImp可执行文件即可。
找出您默认使用的那个:
where tlbimp 对于我而言,它是:
C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\TlbImp.exe 相反,使用较低版本的可执行文件,例如
C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\tlbimp 这为我生成了一个 .Net 2 程序集,无需编辑配置文件。您可以在 exe 上使用 CorFlags 确定它使用的 .Net 版本。或者您可以直接在输出上使用 Corflags。

0

只需运行

C:\Program Files (x86)\Microsoft Visual Studio 8\SDK\v2.0\Bin\TlbImp.exe

生成一个Interop库,.Net版本为2.0。

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